* 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: ~* Starting a New DragonRuby Project~
- Header detected.
*** True Line Result

*** True Line Result
* Starting a New DragonRuby Project
** Processing line: ~~
- End of paragraph detected.
*** True Line Result

** Processing line: ~The zip file is a complete, self contained project structure. To~
** Processing line: ~create a new project, unzip the zip file in its entirety and use~
** Processing line: ~that as a starting point for another game. This is the recommended~
** Processing line: ~approach to starting a new project.~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
The zip file is a complete, self contained project structure. To create a new project, unzip the zip file in its entirety and use that as a starting point for another game. This is the recommended approach to starting a new project.
** Processing line: ~** Rationale~
- Header detected.
*** True Line Result

*** True Line Result
** Rationale
** Processing line: ~~
- End of paragraph detected.
*** True Line Result

** Processing line: ~The DRGTK binary/package in its entirety is designed to be committed~
** Processing line: ~with your source code (it’s why we keep it small). It’s to protect “shelf life”.~
** Processing line: ~3 years from now we might be on a vastly different version of the engine.~
** Processing line: ~But you know that the code you’ve written will definitely work with the~
** Processing line: ~version that was committed to source control. It's strongly recommended that you~
** Processing line: ~do **not** keep DragonRuby Game Tooklit in a shared location and instead unzip~
** Processing line: ~a clean copy for ever game. That being said, You can optionally pass a directory~
** Processing line: ~when starting up DragonRuby from the terminal: ~./dragonruby ./non-defualt-game-directory~.~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
The DRGTK binary/package in its entirety is designed to be committed with your source code (it’s why we keep it small). It’s to protect “shelf life”. 3 years from now we might be on a vastly different version of the engine. But you know that the code you’ve written will definitely work with the version that was committed to source control. It's strongly recommended that you do **not** keep DragonRuby Game Tooklit in a shared location and instead unzip a clean copy for ever game. That being said, You can optionally pass a directory when starting up DragonRuby from the terminal: ~./dragonruby ./non-defualt-game-directory~.
** Processing line: ~~
- End of paragraph detected.
*** True Line Result

** 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's a StackOverflow Survey sorted by highest paid developers: [[https://insights.stackoverflow.com/survey/2021#section-top-paying-technologies-top-paying-technologies]].~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
What really matters is _quality/maturity_. Here's a StackOverflow Survey sorted by highest paid developers: [[https://insights.stackoverflow.com/survey/2021#section-top-paying-technologies-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 slow... it's a language spec.~
** Processing line: ~Sure, an _implementation/runtime_ can be slow though, but then we'd have to talk about~
** Processing line: ~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: ~Here's a some quick demonstrations of how well DragonRuby Game Toolkit Performs:~
** Processing line: ~- [[https://youtu.be/MFR-dvsllA4]]~
- Line was identified as a list.
*** True Line Result
Here's a some quick demonstrations of how well DragonRuby Game Toolkit Performs:
** Processing line: ~- [[https://youtu.be/UuY7CWdvyWM]]~
- Line was identified as a list.
*** True Line Result
- [[https://youtu.be/MFR-dvsllA4]]
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
- [[https://youtu.be/UuY7CWdvyWM]]
** 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: ~*** ~args.state.*.entity_id~~
- Header detected.
*** True Line Result

*** True Line Result
*** ~args.state.*.entity_id~
** Processing line: ~Entities automatically receive an ~entity_id~ of type ~Fixnum~.~
** Processing line: ~*** ~args.state.*.entity_type~~
- Header detected.
*** True Line Result
Entities automatically receive an ~entity_id~ of type ~Fixnum~.
*** True Line Result
*** ~args.state.*.entity_type~
** Processing line: ~Entities can have an ~entity_type~ which is represented as a ~Symbol~.~
** Processing line: ~*** ~args.state.*.created_at~~
- Header detected.
*** True Line Result
Entities can have an ~entity_type~ which is represented as a ~Symbol~.
*** True Line Result
*** ~args.state.*.created_at~
** Processing line: ~Entities have ~created_at~ set to ~args.state.tick_count~ when they are created.~
** Processing line: ~*** ~args.state.*.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
*** ~args.state.*.created_at_elapsed~
** Processing line: ~Returns the elapsed number of ticks since creation.~
** Processing line: ~*** ~args.state.*.global_created_at~~
- Header detected.
*** True Line Result
Returns the elapsed number of ticks since creation.
*** True Line Result
*** ~args.state.*.global_created_at~
** Processing line: ~Entities have ~global_created_at~ set to ~Kernel.global_tick_count~ when they are created.~
** Processing line: ~*** ~args.state.*.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
*** ~args.state.*.global_created_at_elapsed~
** Processing line: ~Returns the elapsed number of global ticks since creation.~
** Processing line: ~*** ~args.state.*.as_hash~~
- Header detected.
*** True Line Result
Returns the elapsed number of global ticks since creation.
*** True Line Result
*** ~args.state.*.as_hash~
** Processing line: ~Entity cast to a ~Hash~ so you can update values as if you were updating a ~Hash~.~
** Processing line: ~*** ~args.state.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
*** ~args.state.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: ~*** ~args.state.new_entity_strict~~
- Header detected.
*** True Line Result

*** True Line Result
*** ~args.state.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: ~*** ~args.state.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
*** ~args.state.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: ~*** ~args.inputs.up~~
- Header detected.
*** True Line Result
Access using input using ~args.inputs~.
*** True Line Result
*** ~args.inputs.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: ~*** ~args.inputs.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
*** ~args.inputs.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: ~*** ~args.inputs.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
*** ~args.inputs.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: ~*** ~args.inputs.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
*** ~args.inputs.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: ~*** ~args.inputs.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
*** ~args.inputs.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: ~*** ~args.inputs.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
*** ~args.inputs.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: ~*** ~args.inputs.text~ OR ~args.inputs.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
*** ~args.inputs.text~ OR ~args.inputs.history~
** Processing line: ~Returns a string that represents the last key that was pressed on the keyboard.~
** Processing line: ~*** ~args.inputs.mouse~~
- Header detected.
*** True Line Result
Returns a string that represents the last key that was pressed on the keyboard.
*** True Line Result
*** ~args.inputs.mouse~
** Processing line: ~Represents the user's~
** Processing line: ~**** ~args.inputs.mouse.x~~
- Header detected.
*** True Line Result
Represents the user's
*** True Line Result
**** ~args.inputs.mouse.x~
** Processing line: ~Returns the current ~x~ location of the mouse.~
** Processing line: ~**** ~args.inputs.mouse.y~~
- Header detected.
*** True Line Result
Returns the current ~x~ location of the mouse.
*** True Line Result
**** ~args.inputs.mouse.y~
** Processing line: ~Returns the current ~y~ location of the mouse.~
** Processing line: ~**** ~args.inputs.mouse.inside_rect? rect~~
- Header detected.
*** True Line Result
Returns the current ~y~ location of the mouse.
*** True Line Result
**** ~args.inputs.mouse.inside_rect? rect~
** Processing line: ~Return. ~args.inputs.mouse.inside_rect?~ takes in any primitive that responds to ~x, y, w, h~:~
** Processing line: ~**** ~args.inputs.mouse.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
**** ~args.inputs.mouse.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: ~**** ~args.inputs.mouse.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
**** ~args.inputs.mouse.moved~
** Processing line: ~Returns ~true~ if the mouse has moved on the current frame.~
** Processing line: ~**** ~args.inputs.mouse.button_left~~
- Header detected.
*** True Line Result
Returns ~true~ if the mouse has moved on the current frame.
*** True Line Result
**** ~args.inputs.mouse.button_left~
** Processing line: ~Returns ~true~ if the left mouse button is down.~
** Processing line: ~**** ~args.inputs.mouse.button_middle~~
- Header detected.
*** True Line Result
Returns ~true~ if the left mouse button is down.
*** True Line Result
**** ~args.inputs.mouse.button_middle~
** Processing line: ~Returns ~true~ if the middle mouse button is down.~
** Processing line: ~**** ~args.inputs.mouse.button_right~~
- Header detected.
*** True Line Result
Returns ~true~ if the middle mouse button is down.
*** True Line Result
**** ~args.inputs.mouse.button_right~
** Processing line: ~Returns ~true~ if the right mouse button is down.~
** Processing line: ~**** ~args.inputs.mouse.button_bits~~
- Header detected.
*** True Line Result
Returns ~true~ if the right mouse button is down.
*** True Line Result
**** ~args.inputs.mouse.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: ~**** ~args.inputs.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
**** ~args.inputs.mouse.wheel~
** Processing line: ~Represents the mouse wheel. Returns ~nil~ if no mouse wheel actions occurred.~
** Processing line: ~***** ~args.inputs.mouse.wheel.x~~
- Header detected.
*** True Line Result
Represents the mouse wheel. Returns ~nil~ if no mouse wheel actions occurred.
*** True Line Result
***** ~args.inputs.mouse.wheel.x~
** Processing line: ~Returns the negative or positive number if the mouse wheel has changed in the ~x~ axis.~
** Processing line: ~***** ~args.inputs.mouse.wheel.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
***** ~args.inputs.mouse.wheel.y~
** Processing line: ~Returns the negative or positive number if the mouse wheel has changed in the ~y~ axis.~
** Processing line: ~**** ~args.inputs.mouse.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
**** ~args.inputs.mouse.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: ~*** ~args.inputs.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
*** ~args.inputs.controller_one~, ~.controller_two~
** Processing line: ~Represents controllers connected to the usb ports.~
** Processing line: ~**** ~args.inputs.controller_(one|two).up~~
- Header detected.
*** True Line Result
Represents controllers connected to the usb ports.
*** True Line Result
**** ~args.inputs.controller_(one|two).up~
** Processing line: ~Returns ~true~ if ~up~ is pressed or held on the directional or left analog.~
** Processing line: ~**** ~args.inputs.controller_(one|two).down~~
- Header detected.
*** True Line Result
Returns ~true~ if ~up~ is pressed or held on the directional or left analog.
*** True Line Result
**** ~args.inputs.controller_(one|two).down~
** Processing line: ~Returns ~true~ if ~down~ is pressed or held on the directional or left analog.~
** Processing line: ~**** ~args.inputs.controller_(one|two).left~~
- Header detected.
*** True Line Result
Returns ~true~ if ~down~ is pressed or held on the directional or left analog.
*** True Line Result
**** ~args.inputs.controller_(one|two).left~
** Processing line: ~Returns ~true~ if ~left~ is pressed or held on the directional or left analog.~
** Processing line: ~**** ~args.inputs.controller_(one|two).right~~
- Header detected.
*** True Line Result
Returns ~true~ if ~left~ is pressed or held on the directional or left analog.
*** True Line Result
**** ~args.inputs.controller_(one|two).right~
** Processing line: ~Returns ~true~ if ~right~ is pressed or held on the directional or left analog.~
** Processing line: ~**** ~args.inputs.controller_(one|two).left_right~~
- Header detected.
*** True Line Result
Returns ~true~ if ~right~ is pressed or held on the directional or left analog.
*** True Line Result
**** ~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).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
**** ~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).(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
**** ~args.inputs.controller_(one|two).(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: ~**** ~args.inputs.controller_(one|two).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
**** ~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).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
**** ~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).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
**** ~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).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
**** ~args.inputs.controller_(one|two).directional_up~
** Processing line: ~Returns ~true~ if ~up~ is pressed or held on the directional.~
** Processing line: ~**** ~args.inputs.controller_(one|two).directional_down~~
- Header detected.
*** True Line Result
Returns ~true~ if ~up~ is pressed or held on the directional.
*** True Line Result
**** ~args.inputs.controller_(one|two).directional_down~
** Processing line: ~Returns ~true~ if ~down~ is pressed or held on the directional.~
** Processing line: ~**** ~args.inputs.controller_(one|two).directional_left~~
- Header detected.
*** True Line Result
Returns ~true~ if ~down~ is pressed or held on the directional.
*** True Line Result
**** ~args.inputs.controller_(one|two).directional_left~
** Processing line: ~Returns ~true~ if ~left~ is pressed or held on the directional.~
** Processing line: ~**** ~args.inputs.controller_(one|two).directional_right~~
- Header detected.
*** True Line Result
Returns ~true~ if ~left~ is pressed or held on the directional.
*** True Line Result
**** ~args.inputs.controller_(one|two).directional_right~
** Processing line: ~Returns ~true~ if ~right~ is pressed or held on the directional.~
** Processing line: ~**** ~args.inputs.controller_(one|two).(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
**** ~args.inputs.controller_(one|two).(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: ~**** ~args.inputs.controller_(one|two).truthy_keys~~
- Header detected.
*** True Line Result
Returns ~true~ if the specific button is pressed or held.
*** True Line Result
**** ~args.inputs.controller_(one|two).truthy_keys~
** Processing line: ~Returns a collection of ~Symbol~s that represent all keys that are in the pressed or held state.~
** Processing line: ~**** ~args.inputs.controller_(one|two).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
**** ~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).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
**** ~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).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
**** ~args.inputs.controller_(one|two).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: ~*** ~args.inputs.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
*** ~args.inputs.keyboard~
** Processing line: ~Represents the user's keyboard~
** Processing line: ~**** ~args.inputs.keyboard.up~~
- Header detected.
*** True Line Result
Represents the user's keyboard
*** True Line Result
**** ~args.inputs.keyboard.up~
** Processing line: ~Returns ~true~ if ~up~ or ~w~ is pressed or held on the keyboard.~
** Processing line: ~**** ~args.inputs.keyboard.down~~
- Header detected.
*** True Line Result
Returns ~true~ if ~up~ or ~w~ is pressed or held on the keyboard.
*** True Line Result
**** ~args.inputs.keyboard.down~
** Processing line: ~Returns ~true~ if ~down~ or ~s~ is pressed or held on the keyboard.~
** Processing line: ~**** ~args.inputs.keyboard.left~~
- Header detected.
*** True Line Result
Returns ~true~ if ~down~ or ~s~ is pressed or held on the keyboard.
*** True Line Result
**** ~args.inputs.keyboard.left~
** Processing line: ~Returns ~true~ if ~left~ or ~a~ is pressed or held on the keyboard.~
** Processing line: ~**** ~args.inputs.keyboard.right~~
- Header detected.
*** True Line Result
Returns ~true~ if ~left~ or ~a~ is pressed or held on the keyboard.
*** True Line Result
**** ~args.inputs.keyboard.right~
** Processing line: ~Returns ~true~ if ~right~ or ~d~ is pressed or held on the keyboard.~
** Processing line: ~**** ~args.inputs.keyboard.left_right~~
- Header detected.
*** True Line Result
Returns ~true~ if ~right~ or ~d~ is pressed or held on the keyboard.
*** True Line Result
**** ~args.inputs.keyboard.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: ~**** ~args.inputs.keyboard.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
**** ~args.inputs.keyboard.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.inputs.touch~~
- Header detected.
*** True Line Result
- ~:up~
*** True Line Result
*** ~args.inputs.touch~
** Processing line: ~Returns a ~Hash~ representing all touch points on a touch device. This api is only available in Indie, and Pro versions.~
** Processing line: ~*** ~args.inputs.finger_left~~
- Header detected.
*** True Line Result
Returns a ~Hash~ representing all touch points on a touch device. This api is only available in Indie, and Pro versions.
*** True Line Result
*** ~args.inputs.finger_left~
** Processing line: ~Returns a ~Hash~ with ~x~ and ~y~ denoting a touch point that is on the left side of the screen. This api is only available in Indie, and Pro versions.~
** Processing line: ~*** ~args.inputs.finger_right~~
- Header detected.
*** True Line Result
Returns a ~Hash~ with ~x~ and ~y~ denoting a touch point that is on the left side of the screen. This api is only available in Indie, and Pro versions.
*** True Line Result
*** ~args.inputs.finger_right~
** Processing line: ~Returns a ~Hash~ with ~x~ and ~y~ denoting a touch point that is on the right side of the screen. This api is only available in Indie, and Pro versions.~
** Processing line: ~** ~args.outputs~~
- Header detected.
*** True Line Result
Returns a ~Hash~ with ~x~ and ~y~ denoting a touch point that is on the right side of the screen. This api is only available in Indie, and Pro versions.
*** True Line Result
** ~args.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: ~    args.outputs.solids     << [0, 0, 100, 100]~
- Inside source: true
*** True Line Result
    args.outputs.solids     << [0, 0, 100, 100]
** Processing line: ~    args.outputs.sprites    << [100, 100, 100, 100, "sprites/square/blue.png"]~
- Inside source: true
*** True Line Result
    args.outputs.sprites    << [100, 100, 100, 100, "sprites/square/blue.png"]
** Processing line: ~    args.outputs.labels     << [200, 200, "Hello World"]~
- Inside source: true
*** True Line Result
    args.outputs.labels     << [200, 200, "Hello World"]
** Processing line: ~    args.outputs.lines      << [300, 300, 400, 400]~
- Inside source: true
*** True Line Result
    args.outputs.lines      << [300, 300, 400, 400]
** 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: ~Primitives are rendered first-in, first-out. The rendering order (sorted by bottom-most to top-most):~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
Primitives are rendered first-in, first-out. The rendering order (sorted by bottom-most to top-most):
** Processing line: ~- ~triangles~~
- Line was identified as a list.
*** True Line Result

** Processing line: ~- ~solids~~
- Line was identified as a list.
*** True Line Result
- ~triangles~
** Processing line: ~- ~sprites~~
- Line was identified as a list.
*** True Line Result
- ~solids~
** Processing line: ~- ~primitives~: Accepts all render primitives. Useful when you want to bypass the default rendering orders for rendering (eg. rendering solids on top of sprites).~
- Line was identified as a list.
*** True Line Result
- ~sprites~
** Processing line: ~- ~labels~~
- Line was identified as a list.
*** True Line Result
- ~primitives~: Accepts all render primitives. Useful when you want to bypass the default rendering orders for rendering (eg. rendering solids on top of sprites).
** Processing line: ~- ~lines~~
- Line was identified as a list.
*** True Line Result
- ~labels~
** Processing line: ~- ~borders~~
- Line was identified as a list.
*** True Line Result
- ~lines~
** Processing line: ~- ~debug~: Accepts all render primitives. Use this to render primitives for debugging (production builds of your game will not render this layer).~
- Line was identified as a list.
*** True Line Result
- ~borders~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
- ~debug~: Accepts all render primitives. Use this to render primitives for debugging (production builds of your game will not render this layer).
** Processing line: ~*** ~args.outputs.background_color~~
- Header detected.
*** True Line Result

*** True Line Result
*** ~args.outputs.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: ~*** ~args.outputs.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
*** ~args.outputs.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: ~*** ~args.outputs.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
*** ~args.outputs.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: ~*** ~args.outputs.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
*** ~args.outputs.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: ~*** ~args.outputs.triangles~, ~.static_triangles~~
- 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
*** ~args.outputs.triangles~, ~.static_triangles~
** Processing line: ~Send a Primitive to this collection to render a textured triangle to the screen.~
** Processing line: ~*** ~args.outputs.sprites~, ~.static_sprites~~
- Header detected.
*** True Line Result
Send a Primitive to this collection to render a textured triangle to the screen.
*** True Line Result
*** ~args.outputs.sprites~, ~.static_sprites~
** Processing line: ~Send a Primitive to this collection to render a sprite to the screen.~
** Processing line: ~*** ~args.outputs.primitives~, ~.static_primitives~~
- Header detected.
*** True Line Result
Send a Primitive to this collection to render a sprite to the screen.
*** True Line Result
*** ~args.outputs.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: ~*** ~args.outputs.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
*** ~args.outputs.labels~, ~.static_labels~
** Processing line: ~Send a Primitive to this collection to render text to the screen.~
** Processing line: ~*** ~args.outputs.lines~, ~.static_lines~~
- Header detected.
*** True Line Result
Send a Primitive to this collection to render text to the screen.
*** True Line Result
*** ~args.outputs.lines~, ~.static_lines~
** Processing line: ~Send a Primitive to this collection to render a line to the screen.~
** Processing line: ~*** ~args.outputs.borders~, ~.static_borders~~
- Header detected.
*** True Line Result
Send a Primitive to this collection to render a line to the screen.
*** True Line Result
*** ~args.outputs.borders~, ~.static_borders~
** Processing line: ~Send a Primitive to this collection to render an unfilled rectangle to the screen.~
** Processing line: ~*** ~args.outputs.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
*** ~args.outputs.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: ~*** ~args.geometry.inside_rect? rect_1, rect_2~~
- Header detected.
*** True Line Result

*** True Line Result
*** ~args.geometry.inside_rect? rect_1, rect_2~
** Processing line: ~Returns ~true~ if ~rect_1~ is inside ~rect_2~.~
** Processing line: ~*** ~args.geometry.intersect_rect? rect_2, rect_2~~
- Header detected.
*** True Line Result
Returns ~true~ if ~rect_1~ is inside ~rect_2~.
*** True Line Result
*** ~args.geometry.intersect_rect? rect_2, rect_2~
** Processing line: ~Returns ~true~ if ~rect_1~ intersects ~rect_2~.~
** Processing line: ~*** ~args.geometry.scale_rect rect, x_percentage, y_percentage~~
- Header detected.
*** True Line Result
Returns ~true~ if ~rect_1~ intersects ~rect_2~.
*** True Line Result
*** ~args.geometry.scale_rect rect, x_percentage, y_percentage~
** Processing line: ~Returns a new rectangle that is scaled by the percentages provided.~
** Processing line: ~*** ~args.geometry.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
*** ~args.geometry.angle_to start_point, end_point~
** Processing line: ~Returns the angle in degrees between two points ~start_point~ to ~end_point~.~
** Processing line: ~*** ~args.geometry.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
*** ~args.geometry.angle_from start_point, end_point~
** Processing line: ~Returns the angle in degrees between two points ~start_point~ from ~end_point~.~
** Processing line: ~*** ~args.geometry.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
*** ~args.geometry.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: ~*** ~args.geometry.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
*** ~args.geometry.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: ~*** ~args.geometry.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
*** ~args.geometry.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: ~*** ~args.geometry.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
*** ~args.geometry.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: ~*** ~args.geometry.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
*** ~args.geometry.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: ~*** ~args.geometry.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
*** ~args.geometry.shift_line line, x, y~
** Processing line: ~Returns a line that is offset by ~x~, and ~y~.~
** Processing line: ~*** ~args.geometry.line_y_intercept line~~
- Header detected.
*** True Line Result
Returns a line that is offset by ~x~, and ~y~.
*** True Line Result
*** ~args.geometry.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: ~*** ~args.geometry.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
*** ~args.geometry.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: ~*** ~args.geometry.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
*** ~args.geometry.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: ~*** ~args.geometry.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
*** ~args.geometry.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: ~*** ~args.geometry.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
*** ~args.geometry.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: ~*** ~args.geometry.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
*** ~args.geometry.line_rect line~
** Processing line: ~Returns the bounding rectangle for a line.~
** Processing line: ~*** ~args.geometry.line_intersect line_one, line_two~~
- Header detected.
*** True Line Result
Returns the bounding rectangle for a line.
*** True Line Result
*** ~args.geometry.line_intersect line_one, line_two~
** Processing line: ~Returns a point that represents the intersection of the lines.~
** Processing line: ~*** ~args.geometry.distance point_one, point_two~~
- Header detected.
*** True Line Result
Returns a point that represents the intersection of the lines.
*** True Line Result
*** ~args.geometry.distance point_one, point_two~
** Processing line: ~Returns the distance between two points.~
** Processing line: ~*** ~args.geometry.cubic_bezier t, a, b, c, d~~
- Header detected.
*** True Line Result
Returns the distance between two points.
*** True Line Result
*** ~args.geometry.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: ~*** ~args.easing.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
*** ~args.easing.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: ~*** ~args.easing.ease_spline start_tick, current_tick, duration, spline~~
- Header detected.
*** True Line Result

*** True Line Result
*** ~args.easing.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: ~*** ~args.string.wrapped_lines string, max_character_length~~
- Header detected.
*** True Line Result
Useful string functions not included in Ruby core libraries.
*** True Line Result
*** ~args.string.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: ~*** ~args.grid.name~~
- Header detected.
*** True Line Result
Returns the virtual grid for the game.
*** True Line Result
*** ~args.grid.name~
** Processing line: ~Returns either ~:origin_bottom_left~ or ~:origin_center~.~
** Processing line: ~*** ~args.grid.bottom~~
- Header detected.
*** True Line Result
Returns either ~:origin_bottom_left~ or ~:origin_center~.
*** True Line Result
*** ~args.grid.bottom~
** Processing line: ~Returns the ~y~ value that represents the bottom of the grid.~
** Processing line: ~*** ~args.grid.top~~
- Header detected.
*** True Line Result
Returns the ~y~ value that represents the bottom of the grid.
*** True Line Result
*** ~args.grid.top~
** Processing line: ~Returns the ~y~ value that represents the top of the grid.~
** Processing line: ~*** ~args.grid.left~~
- Header detected.
*** True Line Result
Returns the ~y~ value that represents the top of the grid.
*** True Line Result
*** ~args.grid.left~
** Processing line: ~Returns the ~x~ value that represents the left of the grid.~
** Processing line: ~*** ~args.grid.right~~
- Header detected.
*** True Line Result
Returns the ~x~ value that represents the left of the grid.
*** True Line Result
*** ~args.grid.right~
** Processing line: ~Returns the ~x~ value that represents the right of the grid.~
** Processing line: ~*** ~args.grid.rect~~
- Header detected.
*** True Line Result
Returns the ~x~ value that represents the right of the grid.
*** True Line Result
*** ~args.grid.rect~
** Processing line: ~Returns a rectangle Primitive that represents the grid.~
** Processing line: ~*** ~args.grid.origin_bottom_left!~~
- Header detected.
*** True Line Result
Returns a rectangle Primitive that represents the grid.
*** True Line Result
*** ~args.grid.origin_bottom_left!~
** Processing line: ~Change the grids coordinate system to 0, 0 at the bottom left corner.~
** Processing line: ~*** ~args.grid.origin_center!~~
- Header detected.
*** True Line Result
Change the grids coordinate system to 0, 0 at the bottom left corner.
*** True Line Result
*** ~args.grid.origin_center!~
** Processing line: ~Change the grids coordinate system to 0, 0 at the center of the screen.~
** Processing line: ~*** ~args.grid.w~~
- Header detected.
*** True Line Result
Change the grids coordinate system to 0, 0 at the center of the screen.
*** True Line Result
*** ~args.grid.w~
** Processing line: ~Returns the grid's width (always 1280).~
** Processing line: ~*** ~args.grid.h~~
- Header detected.
*** True Line Result
Returns the grid's width (always 1280).
*** True Line Result
*** ~args.grid.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: ~*** ~args.gtk.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
*** ~args.gtk.argv~
** Processing line: ~Returns a ~String~ that represents the parameters passed into the ~./dragonruby~ binary.~
** Processing line: ~*** ~args.gtk.platform~~
- Header detected.
*** True Line Result
Returns a ~String~ that represents the parameters passed into the ~./dragonruby~ binary.
*** True Line Result
*** ~args.gtk.platform~
** Processing line: ~Returns a ~String~ representing the operating system the game is running on.~
** Processing line: ~*** ~args.gtk.request_quit~~
- Header detected.
*** True Line Result
Returns a ~String~ representing the operating system the game is running on.
*** True Line Result
*** ~args.gtk.request_quit~
** Processing line: ~Request that the runtime quit the game.~
** Processing line: ~*** ~args.gtk.write_file path, contents~~
- Header detected.
*** True Line Result
Request that the runtime quit the game.
*** True Line Result
*** ~args.gtk.write_file path, contents~
** Processing line: ~Writes/overwrites a file within the game directory + path.~
** Processing line: ~*** ~args.gtk.write_file_root~~
- Header detected.
*** True Line Result
Writes/overwrites a file within the game directory + path.
*** True Line Result
*** ~args.gtk.write_file_root~
** Processing line: ~Writes/overwrites a file within the root dragonruby binary directory + path.~
** Processing line: ~*** ~args.gtk.append_file path, contents~~
- Header detected.
*** True Line Result
Writes/overwrites a file within the root dragonruby binary directory + path.
*** True Line Result
*** ~args.gtk.append_file path, contents~
** Processing line: ~Append content to a file located at the game directory + path.~
** Processing line: ~*** ~args.gtk.append_file_root path, contents~~
- Header detected.
*** True Line Result
Append content to a file located at the game directory + path.
*** True Line Result
*** ~args.gtk.append_file_root path, contents~
** Processing line: ~Append content to a file located at the root dragonruby binary directory + path.~
** Processing line: ~*** ~args.gtk.read_file path~~
- Header detected.
*** True Line Result
Append content to a file located at the root dragonruby binary directory + path.
*** True Line Result
*** ~args.gtk.read_file path~
** Processing line: ~Reads a file from the sandboxed file system.~
** Processing line: ~*** ~args.gtk.parse_xml string, parse_xml_file path~~
- Header detected.
*** True Line Result
Reads a file from the sandboxed file system.
*** True Line Result
*** ~args.gtk.parse_xml string, parse_xml_file path~
** Processing line: ~Returns a ~Hash~ for a ~String~ that represents XML.~
** Processing line: ~*** ~args.gtk.parse_json string, parse_json_file path~~
- Header detected.
*** True Line Result
Returns a ~Hash~ for a ~String~ that represents XML.
*** True Line Result
*** ~args.gtk.parse_json string, parse_json_file path~
** Processing line: ~Returns a ~Hash~ for a ~String~ that represents JSON.~
** Processing line: ~*** ~args.gtk.http_get url, extra_headers = {}~~
- Header detected.
*** True Line Result
Returns a ~Hash~ for a ~String~ that represents JSON.
*** True Line Result
*** ~args.gtk.http_get url, extra_headers = {}~
** Processing line: ~Creates an async task to perform an HTTP GET.~
** Processing line: ~*** ~args.gtk.http_post url, form_fields = {}, extra_headers = {}~~
- Header detected.
*** True Line Result
Creates an async task to perform an HTTP GET.
*** True Line Result
*** ~args.gtk.http_post url, form_fields = {}, extra_headers = {}~
** Processing line: ~Creates an async task to perform an HTTP POST.~
** Processing line: ~*** ~args.gtk.reset~~
- Header detected.
*** True Line Result
Creates an async task to perform an HTTP POST.
*** True Line Result
*** ~args.gtk.reset~
** Processing line: ~Resets the game by deleting all data in ~args.state~ and setting ~args.state.tick_count~ back to ~0~.~
** Processing line: ~*** ~args.gtk.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
*** ~args.gtk.stop_music~
** Processing line: ~Stops all background music.~
** Processing line: ~*** ~args.gtk.calcstringbox str, size_enum, font~~
- Header detected.
*** True Line Result
Stops all background music.
*** True Line Result
*** ~args.gtk.calcstringbox str, size_enum, font~
** Processing line: ~Returns a tuple with width and height of a string being rendered.~
** Processing line: ~*** ~args.gtk.calcspritebox path~~
- Header detected.
*** True Line Result
Returns a tuple with width and height of a string being rendered.
*** True Line Result
*** ~args.gtk.calcspritebox path~
** Processing line: ~Returns a tuple with width and height of a sprite.~
** Processing line: ~*** ~args.gtk.reset_sprite path~~
- Header detected.
*** True Line Result
Returns a tuple with width and height of a sprite.
*** True Line Result
*** ~args.gtk.reset_sprite path~
** Processing line: ~Invalidates the cache of a sprite that as already been rendered.~
** Processing line: ~*** ~args.gtk.slowmo! factor~~
- Header detected.
*** True Line Result
Invalidates the cache of a sprite that as already been rendered.
*** True Line Result
*** ~args.gtk.slowmo! factor~
** Processing line: ~Slows the game down by the factor provided. ~args.gtk.slowmo! 60~ would mean that ~tick~ will be called once per second ~(fps = factor / 60)~.~
** Processing line: ~*** ~args.gtk.notify! string~~
- Header detected.
*** True Line Result
Slows the game down by the factor provided. ~args.gtk.slowmo! 60~ would mean that ~tick~ will be called once per second ~(fps = factor / 60)~.
*** True Line Result
*** ~args.gtk.notify! string~
** Processing line: ~Renders a toast message at the bottom of the screen.~
** Processing line: ~*** ~args.gtk.system~~
- Header detected.
*** True Line Result
Renders a toast message at the bottom of the screen.
*** True Line Result
*** ~args.gtk.system~
** Processing line: ~Invokes a shell command and prints the result to the console.~
** Processing line: ~*** ~args.gtk.exec~~
- Header detected.
*** True Line Result
Invokes a shell command and prints the result to the console.
*** True Line Result
*** ~args.gtk.exec~
** Processing line: ~Invokes a shell command and returns a ~String~ that represents the result.~
** Processing line: ~*** ~args.gtk.save_state~~
- Header detected.
*** True Line Result
Invokes a shell command and returns a ~String~ that represents the result.
*** True Line Result
*** ~args.gtk.save_state~
** Processing line: ~Saves the game state to ~game_state.txt~.~
** Processing line: ~*** ~args.gtk.load_state~~
- Header detected.
*** True Line Result
Saves the game state to ~game_state.txt~.
*** True Line Result
*** ~args.gtk.load_state~
** Processing line: ~Load ~args.state~ from ~game_state.txt~.~
** Processing line: ~*** ~args.gtk.serialize_state file, state~~
- Header detected.
*** True Line Result
Load ~args.state~ from ~game_state.txt~.
*** True Line Result
*** ~args.gtk.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: ~*** ~args.gtk.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
*** ~args.gtk.deserialize_state file~
** Processing line: ~Returns entity state from a file or serialization data represented as a ~String~.~
** Processing line: ~*** ~args.gtk.reset_sprite path~~
- Header detected.
*** True Line Result
Returns entity state from a file or serialization data represented as a ~String~.
*** True Line Result
*** ~args.gtk.reset_sprite path~
** Processing line: ~Invalids the texture cache of a sprite.~
** Processing line: ~*** ~args.gtk.show_cursor~~
- Header detected.
*** True Line Result
Invalids the texture cache of a sprite.
*** True Line Result
*** ~args.gtk.show_cursor~
** Processing line: ~Shows the mouse cursor.~
** Processing line: ~*** ~args.gtk.hide_cursor~~
- Header detected.
*** True Line Result
Shows the mouse cursor.
*** True Line Result
*** ~args.gtk.hide_cursor~
** Processing line: ~Hides the mouse cursor.~
** Processing line: ~*** ~args.gtk.set_cursor path, dx, dy~~
- Header detected.
*** True Line Result
Hides the mouse cursor.
*** True Line Result
*** ~args.gtk.set_cursor path, dx, dy~
** Processing line: ~Sets the system cursor to a sprite ~path~ with an offset of ~dx~ and ~dy~.~
** Processing line: ~*** ~args.gtk.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
*** ~args.gtk.cursor_shown?~
** Processing line: ~Returns ~true~ if the mouse cursor is shown.~
** Processing line: ~*** ~args.gtk.set_window_fullscreen enabled~~
- Header detected.
*** True Line Result
Returns ~true~ if the mouse cursor is shown.
*** True Line Result
*** ~args.gtk.set_window_fullscreen enabled~
** Processing line: ~Sets the game to either fullscreen (~enabled=true~) or windowed (~enabled=false)~.~
** Processing line: ~*** ~args.gtk.openurl url~~
- Header detected.
*** True Line Result
Sets the game to either fullscreen (~enabled=true~) or windowed (~enabled=false)~.
*** True Line Result
*** ~args.gtk.openurl url~
** Processing line: ~Opens a url using the Operating System's default browser.~
** Processing line: ~*** ~args.gtk.get_base_dir~~
- Header detected.
*** True Line Result
Opens a url using the Operating System's default browser.
*** True Line Result
*** ~args.gtk.get_base_dir~
** Processing line: ~Returns the full path of the DragonRuby binary directory.~
** Processing line: ~*** ~args.gtk.get_game_dir~~
- Header detected.
*** True Line Result
Returns the full path of the DragonRuby binary directory.
*** True Line Result
*** ~args.gtk.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#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::Args#easing~~
- Header detected.
*** True Line Result

*** True Line Result
* DOCS: ~GTK::Args#easing~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result

** Processing line: ~This function will give you a float value between ~0~ and ~1~ that represents a percentage. You need to give the~
** Processing line: ~funcation a ~start_tick~, ~current_tick~, duration, and easing ~definitions~.~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
This function will give you a float value between ~0~ and ~1~ that represents a percentage. You need to give the funcation a ~start_tick~, ~current_tick~, duration, and easing ~definitions~.
** Processing line: ~This YouTube video is a fantastic introduction to easing functions: [[https://www.youtube.com/watch?v=mr5xkf6zSzk]]~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
This YouTube video is a fantastic introduction to easing functions: [[https://www.youtube.com/watch?v=mr5xkf6zSzk]]
** Processing line: ~** Example~
- Header detected.
*** True Line Result

*** True Line Result
** Example
** Processing line: ~~
- End of paragraph detected.
*** True Line Result

** Processing line: ~This example shows how to fade in a label at frame 60 over two seconds (120 ticks). The ~:identity~ definition~
** Processing line: ~implies a linear fade: ~f(x) -> x~.~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
This example shows how to fade in a label at frame 60 over two seconds (120 ticks). The ~:identity~ definition implies a linear fade: ~f(x) -> x~.
** 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: ~    fade_in_at   = 60~
- Inside source: true
*** True Line Result
    fade_in_at   = 60
** Processing line: ~    current_tick = args.state.tick_count~
- Inside source: true
*** True Line Result
    current_tick = args.state.tick_count
** Processing line: ~    duration     = 120~
- Inside source: true
*** True Line Result
    duration     = 120
** Processing line: ~    percentage   = args.easing.ease fade_in_at,~
- Inside source: true
*** True Line Result
    percentage   = args.easing.ease fade_in_at,
** Processing line: ~                                    current_tick,~
- Inside source: true
*** True Line Result
                                    current_tick,
** Processing line: ~                                    duration,~
- Inside source: true
*** True Line Result
                                    duration,
** Processing line: ~                                    :identity~
- Inside source: true
*** True Line Result
                                    :identity
** Processing line: ~    alpha = 255 * percentage~
- Inside source: true
*** True Line Result
    alpha = 255 * percentage
** Processing line: ~    args.outputs.labels << { x: 640,~
- Inside source: true
*** True Line Result
    args.outputs.labels << { x: 640,
** Processing line: ~                             y: 320, text: "#{percentage.to_sf}",~
- Inside source: true
*** True Line Result
                             y: 320, text: "#{percentage.to_sf}",
** Processing line: ~                             alignment_enum: 1,~
- Inside source: true
*** True Line Result
                             alignment_enum: 1,
** Processing line: ~                             a: alpha }~
- Inside source: true
*** True Line Result
                             a: alpha }
** 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: ~** Easing Definitions~
- Header detected.
*** True Line Result

*** True Line Result
** Easing Definitions
** Processing line: ~There are a number of easing definitions availble to you:~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
There are a number of easing definitions availble to you:
** Processing line: ~*** ~:identity~~
- Header detected.
*** True Line Result

*** True Line Result
*** ~:identity~
** Processing line: ~The easing definition for ~:identity~ is ~f(x) = x~. For example, if ~start_tick~ is ~0~, ~current_tick~ is ~50~, and~
** Processing line: ~~duration~ is ~100~, then ~args.easing.ease 0, 50, 100, :identity~ will return ~0.5~ (since tick ~50~ is half way between ~0~~
** Processing line: ~and ~100~).~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
The easing definition for ~:identity~ is ~f(x) = x~. For example, if ~start_tick~ is ~0~, ~current_tick~ is ~50~, and ~duration~ is ~100~, then ~args.easing.ease 0, 50, 100, :identity~ will return ~0.5~ (since tick ~50~ is half way between ~0~ and ~100~).
** Processing line: ~*** ~:flip~~
- Header detected.
*** True Line Result

*** True Line Result
*** ~:flip~
** Processing line: ~The easing definition for ~:flip~ is ~f(x) = 1 - x~. For example, if ~start_tick~ is ~0~, ~current_tick~ is ~10~, and~
** Processing line: ~~duration~ is ~100~, then ~args.easing.ease 0, 10, 100, :flip~ will return ~0.9~ (since tick ~10~ means 100% - 10%).~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
The easing definition for ~:flip~ is ~f(x) = 1 - x~. For example, if ~start_tick~ is ~0~, ~current_tick~ is ~10~, and ~duration~ is ~100~, then ~args.easing.ease 0, 10, 100, :flip~ will return ~0.9~ (since tick ~10~ means 100% - 10%).
** Processing line: ~*** ~:quad~, ~:cube~, ~:quart~, ~:qunit~~
- Header detected.
*** True Line Result

*** True Line Result
*** ~:quad~, ~:cube~, ~:quart~, ~:qunit~
** Processing line: ~These are the power easing definitions. ~:quad~ is ~f(x) = x * x~ (~x~ squared), ~:cube~ is ~f(x) = x * x * x~  (~x~ cubed), etc.~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
These are the power easing definitions. ~:quad~ is ~f(x) = x * x~ (~x~ squared), ~:cube~ is ~f(x) = x * x * x~  (~x~ cubed), etc.
** Processing line: ~The power easing definitions represent Smooth Start easing (the percentage changes slow at first and speeds up at the end).~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
The power easing definitions represent Smooth Start easing (the percentage changes slow at first and speeds up at the end).
** Processing line: ~**** Example~
- Header detected.
*** True Line Result

*** True Line Result
**** Example
** Processing line: ~Here is an example of Smooth Start (the percentage changes slow at first and speeds up at the end).~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
Here is an example of Smooth Start (the percentage changes slow at first and speeds up at the end).
** 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: ~    start_tick   = 60~
- Inside source: true
*** True Line Result
    start_tick   = 60
** Processing line: ~    current_tick = args.state.tick_count~
- Inside source: true
*** True Line Result
    current_tick = args.state.tick_count
** Processing line: ~    duration     = 120~
- Inside source: true
*** True Line Result
    duration     = 120
** Processing line: ~    percentage   = args.easing.ease start_tick,~
- Inside source: true
*** True Line Result
    percentage   = args.easing.ease start_tick,
** Processing line: ~                                    current_tick,~
- Inside source: true
*** True Line Result
                                    current_tick,
** Processing line: ~                                    duration,~
- Inside source: true
*** True Line Result
                                    duration,
** Processing line: ~                                    :quad~
- Inside source: true
*** True Line Result
                                    :quad
** Processing line: ~    start_x      = 100~
- Inside source: true
*** True Line Result
    start_x      = 100
** Processing line: ~    end_x        = 1180~
- Inside source: true
*** True Line Result
    end_x        = 1180
** Processing line: ~    distance_x   = end_x - start_x~
- Inside source: true
*** True Line Result
    distance_x   = end_x - start_x
** Processing line: ~    final_x      = start_x + (distance_x * percentage)~
- Inside source: true
*** True Line Result
    final_x      = start_x + (distance_x * percentage)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    start_y      = 100~
- Inside source: true
*** True Line Result
    start_y      = 100
** Processing line: ~    end_y        = 620~
- Inside source: true
*** True Line Result
    end_y        = 620
** Processing line: ~    distance_y   = end_y - start_y~
- Inside source: true
*** True Line Result
    distance_y   = end_y - start_y
** Processing line: ~    final_y      = start_y + (distance_y * percentage)~
- Inside source: true
*** True Line Result
    final_y      = start_y + (distance_y * percentage)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.labels << { x: final_x,~
- Inside source: true
*** True Line Result
    args.outputs.labels << { x: final_x,
** Processing line: ~                             y: final_y,~
- Inside source: true
*** True Line Result
                             y: final_y,
** Processing line: ~                             text: "#{percentage.to_sf}",~
- Inside source: true
*** True Line Result
                             text: "#{percentage.to_sf}",
** 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_src~
- Line was identified as the end of a code block.
*** True Line Result
#+end_src
** Processing line: ~~
- End of paragraph detected.
*** True Line Result

** Processing line: ~*** Combining Easing Definitions~
- Header detected.
*** True Line Result

*** True Line Result
*** Combining Easing Definitions
** Processing line: ~The base easing definitions can be combined to create common easing functions.~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
The base easing definitions can be combined to create common easing functions.
** Processing line: ~**** Example~
- Header detected.
*** True Line Result

*** True Line Result
**** Example
** Processing line: ~Here is an example of Smooth Stop (the percentage changes fast at first and slows down at the end).~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
Here is an example of Smooth Stop (the percentage changes fast at first and slows down at the end).
** 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: ~    start_tick   = 60~
- Inside source: true
*** True Line Result
    start_tick   = 60
** Processing line: ~    current_tick = args.state.tick_count~
- Inside source: true
*** True Line Result
    current_tick = args.state.tick_count
** Processing line: ~    duration     = 120~
- Inside source: true
*** True Line Result
    duration     = 120
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # :flip, :quad, :flip is Smooth Stop~
- Inside source: true
*** True Line Result
    # :flip, :quad, :flip is Smooth Stop
** Processing line: ~    percentage   = args.easing.ease start_tick,~
- Inside source: true
*** True Line Result
    percentage   = args.easing.ease start_tick,
** Processing line: ~                                    current_tick,~
- Inside source: true
*** True Line Result
                                    current_tick,
** Processing line: ~                                    duration,~
- Inside source: true
*** True Line Result
                                    duration,
** Processing line: ~                                    :flip, :quad, :flip~
- Inside source: true
*** True Line Result
                                    :flip, :quad, :flip
** Processing line: ~    start_x      = 100~
- Inside source: true
*** True Line Result
    start_x      = 100
** Processing line: ~    end_x        = 1180~
- Inside source: true
*** True Line Result
    end_x        = 1180
** Processing line: ~    distance_x   = end_x - start_x~
- Inside source: true
*** True Line Result
    distance_x   = end_x - start_x
** Processing line: ~    final_x      = start_x + (distance_x * percentage)~
- Inside source: true
*** True Line Result
    final_x      = start_x + (distance_x * percentage)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    start_y      = 100~
- Inside source: true
*** True Line Result
    start_y      = 100
** Processing line: ~    end_y        = 620~
- Inside source: true
*** True Line Result
    end_y        = 620
** Processing line: ~    distance_y   = end_y - start_y~
- Inside source: true
*** True Line Result
    distance_y   = end_y - start_y
** Processing line: ~    final_y      = start_y + (distance_y * percentage)~
- Inside source: true
*** True Line Result
    final_y      = start_y + (distance_y * percentage)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.labels << { x: final_x,~
- Inside source: true
*** True Line Result
    args.outputs.labels << { x: final_x,
** Processing line: ~                             y: final_y,~
- Inside source: true
*** True Line Result
                             y: final_y,
** Processing line: ~                             text: "#{percentage.to_sf}",~
- Inside source: true
*** True Line Result
                             text: "#{percentage.to_sf}",
** 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_src~
- Line was identified as the end of a code block.
*** True Line Result
#+end_src
** Processing line: ~~
- End of paragraph detected.
*** True Line Result

** Processing line: ~*** Custom Easing Functions~
- Header detected.
*** True Line Result

*** True Line Result
*** Custom Easing Functions
** Processing line: ~You can define your own easing functions by passing in a ~lambda~ as a ~definition~ or extending~
** Processing line: ~the ~Easing~ module.~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
You can define your own easing functions by passing in a ~lambda~ as a ~definition~ or extending the ~Easing~ module.
** Processing line: ~**** Example - Using Lambdas~
- Header detected.
*** True Line Result

*** True Line Result
**** Example - Using Lambdas
** Processing line: ~This easing function goes from ~0~ to ~1~ for the first half of the ease, then ~1~ to ~0~ for~
** Processing line: ~the second half of the ease.~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
This easing function goes from ~0~ to ~1~ for the first half of the ease, then ~1~ to ~0~ for the second half of the ease.
** 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: ~    fade_in_at    = 60~
- Inside source: true
*** True Line Result
    fade_in_at    = 60
** Processing line: ~    current_tick  = args.state.tick_count~
- Inside source: true
*** True Line Result
    current_tick  = args.state.tick_count
** Processing line: ~    duration      = 600~
- Inside source: true
*** True Line Result
    duration      = 600
** Processing line: ~    easing_lambda = lambda do |percentage, start_tick, duration|~
- Inside source: true
*** True Line Result
    easing_lambda = lambda do |percentage, start_tick, duration|
** Processing line: ~                      fx = percentage~
- Inside source: true
*** True Line Result
                      fx = percentage
** Processing line: ~                      if fx < 0.5~
- Inside source: true
*** True Line Result
                      if fx < 0.5
** Processing line: ~                        fx = percentage * 2~
- Inside source: true
*** True Line Result
                        fx = percentage * 2
** Processing line: ~                      else~
- Inside source: true
*** True Line Result
                      else
** Processing line: ~                        fx = 1 - (percentage - 0.5) * 2~
- Inside source: true
*** True Line Result
                        fx = 1 - (percentage - 0.5) * 2
** Processing line: ~                      end~
- Inside source: true
*** True Line Result
                      end
** Processing line: ~                      fx~
- Inside source: true
*** True Line Result
                      fx
** Processing line: ~                    end~
- Inside source: true
*** True Line Result
                    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    percentage    = args.easing.ease fade_in_at,~
- Inside source: true
*** True Line Result
    percentage    = args.easing.ease fade_in_at,
** Processing line: ~                                     current_tick,~
- Inside source: true
*** True Line Result
                                     current_tick,
** Processing line: ~                                     duration,~
- Inside source: true
*** True Line Result
                                     duration,
** Processing line: ~                                     easing_lambda~
- Inside source: true
*** True Line Result
                                     easing_lambda
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    alpha = 255 * percentage~
- Inside source: true
*** True Line Result
    alpha = 255 * percentage
** Processing line: ~    args.outputs.labels << { x: 640,~
- Inside source: true
*** True Line Result
    args.outputs.labels << { x: 640,
** Processing line: ~                             y: 320,~
- Inside source: true
*** True Line Result
                             y: 320,
** Processing line: ~                             a: alpha,~
- Inside source: true
*** True Line Result
                             a: alpha,
** Processing line: ~                             text: "#{percentage.to_sf}",~
- Inside source: true
*** True Line Result
                             text: "#{percentage.to_sf}",
** 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_src~
- Line was 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 - Extending Easing Definitions~
- Header detected.
*** True Line Result

*** True Line Result
**** Example - Extending Easing Definitions
** Processing line: ~If you don't want to create a lambda, you can register an easing definition like so:~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
If you don't want to create a lambda, you can register an easing definition like so:
** Processing line: ~#+begin_src~
- Line was identified as the beginning of a code block.
*** True Line Result

*** True Line Result
#+begin_src
** Processing line: ~  # 1. Extend the Easing module~
- Inside source: true
*** True Line Result
  # 1. Extend the Easing module
** Processing line: ~  module Easing~
- Inside source: true
*** True Line Result
  module Easing
** Processing line: ~    def self.saw_tooth x~
- Inside source: true
*** True Line Result
    def self.saw_tooth x
** Processing line: ~      if x < 0.5~
- Inside source: true
*** True Line Result
      if x < 0.5
** Processing line: ~        x * 2~
- Inside source: true
*** True Line Result
        x * 2
** Processing line: ~      else~
- Inside source: true
*** True Line Result
      else
** Processing line: ~        1 - (x - 0.5) * 2~
- Inside source: true
*** True Line Result
        1 - (x - 0.5) * 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 tick args~
- Inside source: true
*** True Line Result
  def tick args
** Processing line: ~    fade_in_at    = 60~
- Inside source: true
*** True Line Result
    fade_in_at    = 60
** Processing line: ~    current_tick  = args.state.tick_count~
- Inside source: true
*** True Line Result
    current_tick  = args.state.tick_count
** Processing line: ~    duration      = 600~
- Inside source: true
*** True Line Result
    duration      = 600
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # 2. Reference easing definition by name~
- Inside source: true
*** True Line Result
    # 2. Reference easing definition by name
** Processing line: ~    percentage    = args.easing.ease fade_in_at,~
- Inside source: true
*** True Line Result
    percentage    = args.easing.ease fade_in_at,
** Processing line: ~                                     current_tick,~
- Inside source: true
*** True Line Result
                                     current_tick,
** Processing line: ~                                     duration,~
- Inside source: true
*** True Line Result
                                     duration,
** Processing line: ~                                     :saw_tooth~
- Inside source: true
*** True Line Result
                                     :saw_tooth
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    alpha = 255 * percentage~
- Inside source: true
*** True Line Result
    alpha = 255 * percentage
** Processing line: ~    args.outputs.labels << { x: 640,~
- Inside source: true
*** True Line Result
    args.outputs.labels << { x: 640,
** Processing line: ~                             y: 320,~
- Inside source: true
*** True Line Result
                             y: 320,
** Processing line: ~                             a: alpha,~
- Inside source: true
*** True Line Result
                             a: alpha,
** Processing line: ~                             text: "#{percentage.to_sf}",~
- Inside source: true
*** True Line Result
                             text: "#{percentage.to_sf}",
** 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_src~
- Line was 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: ~    args.outputs.solids     << [0, 0, 100, 100]~
- Inside source: true
*** True Line Result
    args.outputs.solids     << [0, 0, 100, 100]
** Processing line: ~    args.outputs.sprites    << [100, 100, 100, 100, "sprites/square/blue.png"]~
- Inside source: true
*** True Line Result
    args.outputs.sprites    << [100, 100, 100, 100, "sprites/square/blue.png"]
** Processing line: ~    args.outputs.labels     << [200, 200, "Hello World"]~
- Inside source: true
*** True Line Result
    args.outputs.labels     << [200, 200, "Hello World"]
** Processing line: ~    args.outputs.lines      << [300, 300, 400, 400]~
- Inside source: true
*** True Line Result
    args.outputs.lines      << [300, 300, 400, 400]
** 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: ~Primitives are rendered first-in, first-out. The rendering order (sorted by bottom-most to top-most):~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
Primitives are rendered first-in, first-out. The rendering order (sorted by bottom-most to top-most):
** Processing line: ~- ~solids~~
- Line was identified as a list.
*** True Line Result

** Processing line: ~- ~sprites~~
- Line was identified as a list.
*** True Line Result
- ~solids~
** Processing line: ~- ~primitives~: Accepts all render primitives. Useful when you want to bypass the default rendering orders for rendering (eg. rendering solids on top of sprites).~
- Line was identified as a list.
*** True Line Result
- ~sprites~
** Processing line: ~- ~labels~~
- Line was identified as a list.
*** True Line Result
- ~primitives~: Accepts all render primitives. Useful when you want to bypass the default rendering orders for rendering (eg. rendering solids on top of sprites).
** Processing line: ~- ~lines~~
- Line was identified as a list.
*** True Line Result
- ~labels~
** Processing line: ~- ~borders~~
- Line was identified as a list.
*** True Line Result
- ~lines~
** Processing line: ~- ~debug~: Accepts all render primitives. Use this to render primitives for debugging (production builds of your game will not render this layer).~
- Line was identified as a list.
*** True Line Result
- ~borders~
** Processing line: ~~
- End of paragraph detected.
*** True Line Result
- ~debug~: Accepts all render primitives. Use this to render primitives for debugging (production builds of your game will not render this layer).
** 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!", "puts "~
- Inside source: true
*** True Line Result
    return unless console_has? "Hello DragonRuby!", "puts "
** 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, not_message = nil~
- Inside source: true
*** True Line Result
  def console_has? message, not_message = nil
** Processing line: ~    console.log~
- Inside source: true
*** True Line Result
    console.log
** Processing line: ~           .map(&:upcase)~
- Inside source: true
*** True Line Result
           .map(&:upcase)
** Processing line: ~           .reject { |s| not_message && s.include?(not_message.upcase) }~
- Inside source: true
*** True Line Result
           .reject { |s| not_message && s.include?(not_message.upcase) }
** Processing line: ~           .any?   { |s| s.include?("#{message.upcase}") }~
- Inside source: true
*** True Line Result
           .any?   { |s| s.include?("#{message.upcase}") }
** 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<xmin) ? xmin : @x;~
- Inside source: true
*** True Line Result
      @x = (@x+@width > xmax) ? xmax-@width : (@x<xmin) ? xmin : @x;
** 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 << [@x,@y,@width,@height,255,0,0];~
- Inside source: true
*** True Line Result
      args.outputs.solids << [@x,@y,@width,@height,255,0,0];
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def rect~
- Inside source: true
*** True Line Result
    def rect
** Processing line: ~      [@x, @y, @width, @height]~
- Inside source: true
*** True Line Result
      [@x, @y, @width, @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: ~#+end_src~
- Line was 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 - rectangle.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Physics And Collisions - Arbitrary Collision - rectangle.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/rectangle.rb~
- Inside source: true
*** True Line Result
  # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/rectangle.rb
** Processing line: ~  class Rectangle~
- Inside source: true
*** True Line Result
  class Rectangle
** Processing line: ~    def initialize args~
- Inside source: true
*** True Line Result
    def initialize args
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      @image = "sprites/roundSquare_white.png"~
- Inside source: true
*** True Line Result
      @image = "sprites/roundSquare_white.png"
** Processing line: ~      @width  = 160.0~
- Inside source: true
*** True Line Result
      @width  = 160.0
** Processing line: ~      @height = 80.0~
- Inside source: true
*** True Line Result
      @height = 80.0
** Processing line: ~      @x=$args.grid.right/2.0 - @width/2.0~
- Inside source: true
*** True Line Result
      @x=$args.grid.right/2.0 - @width/2.0
** Processing line: ~      @y=$args.grid.top/2.0 - @height/2.0~
- Inside source: true
*** True Line Result
      @y=$args.grid.top/2.0 - @height/2.0
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      @xtmp = @width  * (1.0/10.0)~
- Inside source: true
*** True Line Result
      @xtmp = @width  * (1.0/10.0)
** Processing line: ~      @ytmp = @height * (1.0/10.0)~
- Inside source: true
*** True Line Result
      @ytmp = @height * (1.0/10.0)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      #ball0 = args.state.balls[0]~
- Inside source: true
*** True Line Result
      #ball0 = args.state.balls[0]
** Processing line: ~      #hypotenuse = (args.state.balls[0].width**2 + args.state.balls[0].height**2)**0.5~
- Inside source: true
*** True Line Result
      #hypotenuse = (args.state.balls[0].width**2 + args.state.balls[0].height**2)**0.5
** Processing line: ~      hypotenuse=args.state.ball_hypotenuse~
- Inside source: true
*** True Line Result
      hypotenuse=args.state.ball_hypotenuse
** Processing line: ~      @boldXY = {x:(@x-hypotenuse/2)-1, y:(@y-hypotenuse/2)-1}~
- Inside source: true
*** True Line Result
      @boldXY = {x:(@x-hypotenuse/2)-1, y:(@y-hypotenuse/2)-1}
** Processing line: ~      @boldWidth = @width + hypotenuse + 2~
- Inside source: true
*** True Line Result
      @boldWidth = @width + hypotenuse + 2
** Processing line: ~      @boldHeight = @height + hypotenuse + 2~
- Inside source: true
*** True Line Result
      @boldHeight = @height + hypotenuse + 2
** Processing line: ~      @bold = [(@x-hypotenuse/2)-1,(@y-hypotenuse/2)-1,@width + hypotenuse + 2,@height + hypotenuse + 2]~
- Inside source: true
*** True Line Result
      @bold = [(@x-hypotenuse/2)-1,(@y-hypotenuse/2)-1,@width + hypotenuse + 2,@height + hypotenuse + 2]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      @points = [~
- Inside source: true
*** True Line Result
      @points = [
** Processing line: ~        {x:@x,        y:@y+@ytmp},~
- Inside source: true
*** True Line Result
        {x:@x,        y:@y+@ytmp},
** Processing line: ~        {x:@x+@xtmp,        y:@y},~
- Inside source: true
*** True Line Result
        {x:@x+@xtmp,        y:@y},
** Processing line: ~        {x:@x+@width-@xtmp, y:@y},~
- Inside source: true
*** True Line Result
        {x:@x+@width-@xtmp, y:@y},
** Processing line: ~        {x:@x+@width, y:@y+@ytmp},~
- Inside source: true
*** True Line Result
        {x:@x+@width, y:@y+@ytmp},
** Processing line: ~        {x:@x+@width, y:@y+@height-@ytmp},#~
- Inside source: true
*** True Line Result
        {x:@x+@width, y:@y+@height-@ytmp},#
** Processing line: ~        {x:@x+@width-@xtmp, y:@y+@height},~
- Inside source: true
*** True Line Result
        {x:@x+@width-@xtmp, y:@y+@height},
** Processing line: ~        {x:@x+@xtmp,        y:@y+@height},~
- Inside source: true
*** True Line Result
        {x:@x+@xtmp,        y:@y+@height},
** Processing line: ~        {x:@x,        y:@y+@height-@ytmp}~
- Inside source: true
*** True Line Result
        {x:@x,        y:@y+@height-@ytmp}
** Processing line: ~      ]~
- Inside source: true
*** True Line Result
      ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      @colliders = []~
- Inside source: true
*** True Line Result
      @colliders = []
** Processing line: ~      #i = 0~
- Inside source: true
*** True Line Result
      #i = 0
** Processing line: ~      #while i < @points.length-1~
- Inside source: true
*** True Line Result
      #while i < @points.length-1
** Processing line: ~        #@colliders.append(LinearCollider.new(@points[i],@points[i+1],:pos))~
- Inside source: true
*** True Line Result
        #@colliders.append(LinearCollider.new(@points[i],@points[i+1],:pos))
** Processing line: ~        #i+=1~
- Inside source: true
*** True Line Result
        #i+=1
** Processing line: ~      #end~
- Inside source: true
*** True Line Result
      #end
** Processing line: ~      @colliders.append(LinearCollider.new(@points[0],@points[1], :neg))~
- Inside source: true
*** True Line Result
      @colliders.append(LinearCollider.new(@points[0],@points[1], :neg))
** Processing line: ~      @colliders.append(LinearCollider.new(@points[1],@points[2], :neg))~
- Inside source: true
*** True Line Result
      @colliders.append(LinearCollider.new(@points[1],@points[2], :neg))
** Processing line: ~      @colliders.append(LinearCollider.new(@points[2],@points[3], :neg))~
- Inside source: true
*** True Line Result
      @colliders.append(LinearCollider.new(@points[2],@points[3], :neg))
** Processing line: ~      @colliders.append(LinearCollider.new(@points[3],@points[4], :neg))~
- Inside source: true
*** True Line Result
      @colliders.append(LinearCollider.new(@points[3],@points[4], :neg))
** Processing line: ~      @colliders.append(LinearCollider.new(@points[4],@points[5], :pos))~
- Inside source: true
*** True Line Result
      @colliders.append(LinearCollider.new(@points[4],@points[5], :pos))
** Processing line: ~      @colliders.append(LinearCollider.new(@points[5],@points[6], :pos))~
- Inside source: true
*** True Line Result
      @colliders.append(LinearCollider.new(@points[5],@points[6], :pos))
** Processing line: ~      @colliders.append(LinearCollider.new(@points[6],@points[7], :pos))~
- Inside source: true
*** True Line Result
      @colliders.append(LinearCollider.new(@points[6],@points[7], :pos))
** Processing line: ~      @colliders.append(LinearCollider.new(@points[0],@points[7], :pos))~
- Inside source: true
*** True Line Result
      @colliders.append(LinearCollider.new(@points[0],@points[7], :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 update args~
- Inside source: true
*** True Line Result
    def update args
** Processing line: ~~
- Inside source: true
*** True Line Result

** 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: ~          for c in @colliders~
- Inside source: true
*** True Line Result
          for c in @colliders
** 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: ~            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 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,                                       # X~
- Inside source: true
*** True Line Result
        @x,                                       # X
** Processing line: ~        @y,                                       # Y~
- Inside source: true
*** True Line Result
        @y,                                       # Y
** Processing line: ~        @width,                                   # W~
- Inside source: true
*** True Line Result
        @width,                                   # W
** Processing line: ~        @height,                                  # H~
- Inside source: true
*** True Line Result
        @height,                                  # H
** Processing line: ~        @image,                                   # PATH~
- Inside source: true
*** True Line Result
        @image,                                   # 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: ~        219,                                      # RED_SATURATION~
- Inside source: true
*** True Line Result
        219,                                      # RED_SATURATION
** Processing line: ~        112,                                      # GREEN_SATURATION~
- Inside source: true
*** True Line Result
        112,                                      # GREEN_SATURATION
** Processing line: ~        147                                       # BLUE_SATURATION~
- Inside source: true
*** True Line Result
        147                                       # BLUE_SATURATION
** Processing line: ~      ]~
- Inside source: true
*** True Line Result
      ]
** Processing line: ~      #args.outputs.sprites << [@x, @y, @width, @height, "sprites/roundSquare_small_black.png"]~
- Inside source: true
*** True Line Result
      #args.outputs.sprites << [@x, @y, @width, @height, "sprites/roundSquare_small_black.png"]
** 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 - square_collider.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Physics And Collisions - Arbitrary Collision - square_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/square_collider.rb~
- Inside source: true
*** True Line Result
  # ./samples/04_physics_and_collisions/09_arbitrary_collision/app/square_collider.rb
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~  class SquareCollider~
- Inside source: true
*** True Line Result
  class SquareCollider
** Processing line: ~    def initialize x,y,direction,size=COLLISIONWIDTH~
- Inside source: true
*** True Line Result
    def initialize x,y,direction,size=COLLISIONWIDTH
** 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: ~      @size = size~
- Inside source: true
*** True Line Result
      @size = size
** Processing line: ~      @direction = direction~
- Inside source: true
*** True Line Result
      @direction = direction
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~    def collision? args, ball~
- Inside source: true
*** True Line Result
    def collision? args, ball
** Processing line: ~      #args.outputs.solids <<  [@x, @y, @size, @size,     000, 255, 255]~
- Inside source: true
*** True Line Result
      #args.outputs.solids <<  [@x, @y, @size, @size,     000, 255, 255]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      return [@x,@y,@size,@size].intersect_rect?([ball.x,ball.y,ball.width,ball.height])~
- Inside source: true
*** True Line Result
      return [@x,@y,@size,@size].intersect_rect?([ball.x,ball.y,ball.width,ball.height])
** 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: ~      vmag = (ball.velocity.x**2.0 +ball.velocity.y**2.0)**0.5~
- Inside source: true
*** True Line Result
      vmag = (ball.velocity.x**2.0 +ball.velocity.y**2.0)**0.5
** Processing line: ~      a = ((2.0**0.5)*vmag)/2.0~
- Inside source: true
*** True Line Result
      a = ((2.0**0.5)*vmag)/2.0
** Processing line: ~      if vmag < MAX_VELOCITY~
- Inside source: true
*** True Line Result
      if vmag < MAX_VELOCITY
** Processing line: ~        ball.velocity.x = (a) * @direction.x * 1.1~
- Inside source: true
*** True Line Result
        ball.velocity.x = (a) * @direction.x * 1.1
** Processing line: ~        ball.velocity.y = (a) * @direction.y * 1.1~
- Inside source: true
*** True Line Result
        ball.velocity.y = (a) * @direction.y * 1.1
** Processing line: ~      else~
- Inside source: true
*** True Line Result
      else
** Processing line: ~        ball.velocity.x = (a) * @direction.x~
- Inside source: true
*** True Line Result
        ball.velocity.x = (a) * @direction.x
** Processing line: ~        ball.velocity.y = (a) * @direction.y~
- Inside source: true
*** True Line Result
        ball.velocity.y = (a) * @direction.y
** 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 - vector2d.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Physics And Collisions - Arbitrary 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/09_arbitrary_collision/app/vector2d.rb~
- Inside source: true
*** True Line Result
  # ./samples/04_physics_and_collisions/09_arbitrary_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 - Collision With Object Removal - ball.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Physics And Collisions - Collision With Object Removal - 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/10_collision_with_object_removal/app/ball.rb~
- Inside source: true
*** True Line Result
  # ./samples/04_physics_and_collisions/10_collision_with_object_removal/app/ball.rb
** Processing line: ~  class Ball~
- Inside source: true
*** True Line Result
  class Ball
** Processing line: ~    #TODO limit accessors?~
- Inside source: true
*** True Line Result
    #TODO limit accessors?
** Processing line: ~    attr_accessor :xy, :width, :height, :velocity~
- Inside source: true
*** True Line Result
    attr_accessor :xy, :width, :height, :velocity
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    #@xy [Vector2d] x,y position~
- Inside source: true
*** True Line Result
    #@xy [Vector2d] x,y position
** Processing line: ~    #@velocity [Vector2d] velocity of ball~
- Inside source: true
*** True Line Result
    #@velocity [Vector2d] velocity of ball
** Processing line: ~    def initialize~
- Inside source: true
*** True Line Result
    def initialize
** Processing line: ~      @xy = Vector2d.new(WIDTH/2,500)~
- Inside source: true
*** True Line Result
      @xy = Vector2d.new(WIDTH/2,500)
** Processing line: ~      @velocity = Vector2d.new(4,-4)~
- Inside source: true
*** True Line Result
      @velocity = Vector2d.new(4,-4)
** Processing line: ~      @width =  20~
- Inside source: true
*** True Line Result
      @width =  20
** Processing line: ~      @height = 20~
- Inside source: true
*** True Line Result
      @height = 20
** 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: ~      @xy.x+=@velocity.x~
- Inside source: true
*** True Line Result
      @xy.x+=@velocity.x
** Processing line: ~      @xy.y+=@velocity.y~
- Inside source: true
*** True Line Result
      @xy.y+=@velocity.y
** 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 render args~
- Inside source: true
*** True Line Result
    def render args
** Processing line: ~      args.outputs.solids << [@xy.x,@xy.y,@width,@height,255,0,255];~
- Inside source: true
*** True Line Result
      args.outputs.solids << [@xy.x,@xy.y,@width,@height,255,0,255];
** Processing line: ~      #args.outputs.labels << [20,HEIGHT-50,"velocity: " +@velocity.x.to_s+","+@velocity.y.to_s + "   magnitude:" + @velocity.mag.to_s]~
- Inside source: true
*** True Line Result
      #args.outputs.labels << [20,HEIGHT-50,"velocity: " +@velocity.x.to_s+","+@velocity.y.to_s + "   magnitude:" + @velocity.mag.to_s]
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def rect~
- Inside source: true
*** True Line Result
    def rect
** Processing line: ~      [@xy.x,@xy.y,@width,@height]~
- Inside source: true
*** True Line Result
      [@xy.x,@xy.y,@width,@height]
** 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: ~*** Physics And Collisions - Collision With Object Removal - linear_collider.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Physics And Collisions - Collision With Object Removal - 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/10_collision_with_object_removal/app/linear_collider.rb~
- Inside source: true
*** True Line Result
  # ./samples/04_physics_and_collisions/10_collision_with_object_removal/app/linear_collider.rb
** Processing line: ~  #The LinearCollider (theoretically) produces collisions upon a line segment defined point.y two x,y cordinates~
- Inside source: true
*** True Line Result
  #The LinearCollider (theoretically) produces collisions upon a line segment defined point.y two x,y cordinates
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~  class LinearCollider~
- Inside source: true
*** True Line Result
  class LinearCollider
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    #start [Array of length 2] start of the line segment as a x,y cordinate~
- Inside source: true
*** True Line Result
    #start [Array of length 2] start of the line segment as a x,y cordinate
** Processing line: ~    #last [Array of length 2] end of the line segment as a x,y cordinate~
- Inside source: true
*** True Line Result
    #last [Array of length 2] end of the line segment as a x,y cordinate
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    #inorder for the LinearCollider to be functional the line segment must be said to have a thickness~
- Inside source: true
*** True Line Result
    #inorder for the LinearCollider to be functional the line segment must be said to have a thickness
** Processing line: ~    #(as it is unlikly that a colliding object will land exactly on the linesegment)~
- Inside source: true
*** True Line Result
    #(as it is unlikly that a colliding object will land exactly on the linesegment)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    #extension defines if the line's thickness extends negatively or positively~
- Inside source: true
*** True Line Result
    #extension defines if the line's thickness extends negatively or positively
** Processing line: ~    #extension :pos     extends positively~
- Inside source: true
*** True Line Result
    #extension :pos     extends positively
** Processing line: ~    #extension :neg     extends negatively~
- Inside source: true
*** True Line Result
    #extension :neg     extends negatively
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    #thickness [float] how thick the line should be (should always be atleast as large as the magnitude of the colliding object)~
- Inside source: true
*** True Line Result
    #thickness [float] how thick the line should be (should always be atleast as large as the magnitude of the colliding object)
** Processing line: ~    def initialize (pointA, pointB, extension=:neg, thickness=10)~
- Inside source: true
*** True Line Result
    def initialize (pointA, pointB, extension=:neg, thickness=10)
** 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: ~      @thickness = thickness~
- Inside source: true
*** True Line Result
      @thickness = thickness
** Processing line: ~      @extension = extension~
- Inside source: true
*** True Line Result
      @extension = extension
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      @pointAExtended={~
- Inside source: true
*** True Line Result
      @pointAExtended={
** Processing line: ~        x: @pointA.x + @thickness*(@extension == :neg ? -1 : 1),~
- Inside source: true
*** True Line Result
        x: @pointA.x + @thickness*(@extension == :neg ? -1 : 1),
** Processing line: ~        y: @pointA.y + @thickness*(@extension == :neg ? -1 : 1)~
- Inside source: true
*** True Line Result
        y: @pointA.y + @thickness*(@extension == :neg ? -1 : 1)
** Processing line: ~      }~
- Inside source: true
*** True Line Result
      }
** Processing line: ~      @pointBExtended={~
- Inside source: true
*** True Line Result
      @pointBExtended={
** Processing line: ~        x: @pointB.x + @thickness*(@extension == :neg ? -1 : 1),~
- Inside source: true
*** True Line Result
        x: @pointB.x + @thickness*(@extension == :neg ? -1 : 1),
** Processing line: ~        y: @pointB.y + @thickness*(@extension == :neg ? -1 : 1)~
- Inside source: true
*** True Line Result
        y: @pointB.y + @thickness*(@extension == :neg ? -1 : 1)
** 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 resetPoints(pointA,pointB)~
- Inside source: true
*** True Line Result
    def resetPoints(pointA,pointB)
** 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: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      @pointAExtended={~
- Inside source: true
*** True Line Result
      @pointAExtended={
** Processing line: ~        x:@pointA.x + @thickness*(@extension == :neg ? -1 : 1),~
- Inside source: true
*** True Line Result
        x:@pointA.x + @thickness*(@extension == :neg ? -1 : 1),
** Processing line: ~        y:@pointA.y + @thickness*(@extension == :neg ? -1 : 1)~
- Inside source: true
*** True Line Result
        y:@pointA.y + @thickness*(@extension == :neg ? -1 : 1)
** Processing line: ~      }~
- Inside source: true
*** True Line Result
      }
** Processing line: ~      @pointBExtended={~
- Inside source: true
*** True Line Result
      @pointBExtended={
** Processing line: ~        x:@pointB.x + @thickness*(@extension == :neg ? -1 : 1),~
- Inside source: true
*** True Line Result
        x:@pointB.x + @thickness*(@extension == :neg ? -1 : 1),
** Processing line: ~        y:@pointB.y + @thickness*(@extension == :neg ? -1 : 1)~
- Inside source: true
*** True Line Result
        y:@pointB.y + @thickness*(@extension == :neg ? -1 : 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: ~    #TODO: Ugly function~
- Inside source: true
*** True Line Result
    #TODO: Ugly function
** Processing line: ~    def slope (pointA, pointB)~
- Inside source: true
*** True Line Result
    def slope (pointA, pointB)
** Processing line: ~      return (pointB.x==pointA.x) ? INFINITY : (pointB.y+-pointA.y)/(pointB.x+-pointA.x)~
- Inside source: true
*** True Line Result
      return (pointB.x==pointA.x) ? INFINITY : (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: ~    #TODO: Ugly function~
- Inside source: true
*** True Line Result
    #TODO: Ugly function
** Processing line: ~    def intercept(pointA, pointB)~
- Inside source: true
*** True Line Result
    def intercept(pointA, pointB)
** Processing line: ~      if (slope(pointA, pointB) == INFINITY)~
- Inside source: true
*** True Line Result
      if (slope(pointA, pointB) == INFINITY)
** Processing line: ~        -INFINITY~
- Inside source: true
*** True Line Result
        -INFINITY
** Processing line: ~      elsif slope(pointA, pointB) == -1*INFINITY~
- Inside source: true
*** True Line Result
      elsif slope(pointA, pointB) == -1*INFINITY
** Processing line: ~        INFINITY~
- Inside source: true
*** True Line Result
        INFINITY
** Processing line: ~      else~
- Inside source: true
*** True Line Result
      else
** Processing line: ~        pointA.y+-1.0*(slope(pointA, pointB)*pointA.x)~
- Inside source: true
*** True Line Result
        pointA.y+-1.0*(slope(pointA, pointB)*pointA.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: ~    def calcY(pointA, pointB, x)~
- Inside source: true
*** True Line Result
    def calcY(pointA, pointB, x)
** Processing line: ~      return slope(pointA, pointB)*x + intercept(pointA, pointB)~
- Inside source: true
*** True Line Result
      return slope(pointA, pointB)*x + intercept(pointA, pointB)
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    #test if a collision has occurred~
- Inside source: true
*** True Line Result
    #test if a collision has occurred
** Processing line: ~    def isCollision? (point)~
- Inside source: true
*** True Line Result
    def isCollision? (point)
** Processing line: ~      #INFINITY slop breaks down when trying to determin collision, ergo it requires a special test~
- Inside source: true
*** True Line Result
      #INFINITY slop breaks down when trying to determin collision, ergo it requires a special test
** Processing line: ~      if slope(@pointA, @pointB) ==  INFINITY &&~
- Inside source: true
*** True Line Result
      if slope(@pointA, @pointB) ==  INFINITY &&
** Processing line: ~        point.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<xmin) ? xmin : @x;~
- Inside source: true
*** True Line Result
      @x = (@x+@width > xmax) ? xmax-@width : (@x<xmin) ? xmin : @x;
** 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 << [@x,@y,@width,@height,255,0,0];~
- Inside source: true
*** True Line Result
      args.outputs.solids << [@x,@y,@width,@height,255,0,0];
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def rect~
- Inside source: true
*** True Line Result
    def rect
** Processing line: ~      [@x, @y, @width, @height]~
- Inside source: true
*** True Line Result
      [@x, @y, @width, @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: ~#+end_src~
- Line was 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 - tests.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Physics And Collisions - Collision With Object Removal - 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/04_physics_and_collisions/10_collision_with_object_removal/app/tests.rb~
- Inside source: true
*** True Line Result
  # ./samples/04_physics_and_collisions/10_collision_with_object_removal/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: ~*** Physics And Collisions - Collision With Object Removal - vector2d.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Physics And Collisions - Collision With Object Removal - 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/10_collision_with_object_removal/app/vector2d.rb~
- Inside source: true
*** True Line Result
  # ./samples/04_physics_and_collisions/10_collision_with_object_removal/app/vector2d.rb
** Processing line: ~~
- Inside source: true
*** True Line Result

** 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: ~~
- 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 Click - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Mouse - Mouse Click - 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/01_mouse_click/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/05_mouse/01_mouse_click/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: ~   - 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: ~     For example, [1,2].product([1,2]) would return the following array...~
- Inside source: true
*** True Line Result
     For example, [1,2].product([1,2]) would return the following array...
** Processing line: ~     [[1,1], [1,2], [2,1], [2,2]]~
- Inside source: true
*** True Line Result
     [[1,1], [1,2], [2,1], [2,2]]
** Processing line: ~     More than two arrays can be given to product and it will still work,~
- Inside source: true
*** True Line Result
     More than two arrays can be given to product and it will still work,
** Processing line: ~     such as [1,2].product([1,2],[3,4]). What would product return in this case?~
- Inside source: true
*** True Line Result
     such as [1,2].product([1,2],[3,4]). What would product return in this case?
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~     Answer:~
- Inside source: true
*** True Line Result
     Answer:
** Processing line: ~     [[1,1,3],[1,1,4],[1,2,3],[1,2,4],[2,1,3],[2,1,4],[2,2,3],[2,2,4]]~
- Inside source: true
*** True Line Result
     [[1,1,3],[1,1,4],[1,2,3],[1,2,4],[2,1,3],[2,1,4],[2,2,3],[2,2,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: ~   - yield: Allows you to call a method with a code block and yield to that block.~
- Inside source: true
*** True Line Result
   - yield: Allows you to call a method with a code block and yield to that block.
** 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 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: ~   - 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.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: ~   - Ternary operator (?): Will evaluate a statement (just like an if statement)~
- Inside source: true
*** True Line Result
   - Ternary operator (?): Will evaluate a statement (just like an if statement)
** Processing line: ~     and perform an action if the result is true or another action if it is false.~
- Inside source: true
*** True Line Result
     and perform an action if the result is true or another action if it is false.
** 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: ~   - 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 [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 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.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: ~  =end~
- Inside source: true
*** True Line Result
  =end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~  # This sample app is a classic game of Tic Tac Toe.~
- Inside source: true
*** True Line Result
  # This sample app is a classic game of Tic Tac Toe.
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~  class TicTacToe~
- Inside source: true
*** True Line Result
  class TicTacToe
** Processing line: ~    attr_accessor :_, :state, :outputs, :inputs, :grid, :gtk~
- Inside source: true
*** True Line Result
    attr_accessor :_, :state, :outputs, :inputs, :grid, :gtk
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # Starts the game with player x's turn and creates an array (to_a) for space combinations.~
- Inside source: true
*** True Line Result
    # Starts the game with player x's turn and creates an array (to_a) for space combinations.
** Processing line: ~    # Calls methods necessary for the game to run properly.~
- Inside source: true
*** True Line Result
    # Calls methods necessary for the game to run properly.
** Processing line: ~    def tick~
- Inside source: true
*** True Line Result
    def tick
** Processing line: ~      init_new_game~
- Inside source: true
*** True Line Result
      init_new_game
** Processing line: ~      render_board~
- Inside source: true
*** True Line Result
      render_board
** Processing line: ~      input_board~
- Inside source: true
*** True Line Result
      input_board
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def init_new_game~
- Inside source: true
*** True Line Result
    def init_new_game
** Processing line: ~      state.current_turn       ||= :x~
- Inside source: true
*** True Line Result
      state.current_turn       ||= :x
** Processing line: ~      state.space_combinations ||= [-1, 0, 1].product([-1, 0, 1]).to_a~
- Inside source: true
*** True Line Result
      state.space_combinations ||= [-1, 0, 1].product([-1, 0, 1]).to_a
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.spaces             ||= {}~
- Inside source: true
*** True Line Result
      state.spaces             ||= {}
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.space_combinations.each do |x, y|~
- Inside source: true
*** True Line Result
      state.space_combinations.each do |x, y|
** Processing line: ~        state.spaces[x]    ||= {}~
- Inside source: true
*** True Line Result
        state.spaces[x]    ||= {}
** Processing line: ~        state.spaces[x][y] ||= state.new_entity(:space)~
- Inside source: true
*** True Line Result
        state.spaces[x][y] ||= state.new_entity(:space)
** Processing line: ~      end~
- Inside source: true
*** 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 borders to create grid squares for the game's board. Also outputs the game pieces using labels.~
- Inside source: true
*** True Line Result
    # Uses borders to create grid squares for the game's board. Also outputs the game pieces using labels.
** Processing line: ~    def render_board~
- Inside source: true
*** True Line Result
    def render_board
** Processing line: ~      square_size = 80~
- Inside source: true
*** True Line Result
      square_size = 80
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # Positions the game's board in the center of the screen.~
- Inside source: true
*** True Line Result
      # Positions the game's board in the center of the screen.
** Processing line: ~      # Try removing what follows grid.w_half or grid.h_half and see how the position changes!~
- Inside source: true
*** True Line Result
      # Try removing what follows grid.w_half or grid.h_half and see how the position changes!
** Processing line: ~      board_left = grid.w_half - square_size * 1.5~
- Inside source: true
*** True Line Result
      board_left = grid.w_half - square_size * 1.5
** Processing line: ~      board_top  = grid.h_half - square_size * 1.5~
- Inside source: true
*** True Line Result
      board_top  = grid.h_half - square_size * 1.5
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # At first glance, the add(1) looks pretty trivial. But if you remove it,~
- Inside source: true
*** True Line Result
      # At first glance, the add(1) looks pretty trivial. But if you remove it,
** Processing line: ~      # you'll see that the positioning of the board would be skewed without it!~
- Inside source: true
*** True Line Result
      # you'll see that the positioning of the board would be skewed without it!
** Processing line: ~      # Or if you put 2 in the parenthesis, the pieces will be placed in the wrong squares~
- Inside source: true
*** True Line Result
      # Or if you put 2 in the parenthesis, the pieces will be placed in the wrong squares
** Processing line: ~      # due to the change in board placement.~
- Inside source: true
*** True Line Result
      # due to the change in board placement.
** Processing line: ~      outputs.borders << all_spaces do |x, y, space| # outputs borders for all board spaces~
- Inside source: true
*** True Line Result
      outputs.borders << all_spaces do |x, y, space| # outputs borders for all board spaces
** Processing line: ~        space.border ||= [~
- Inside source: true
*** True Line Result
        space.border ||= [
** Processing line: ~          board_left + x.add(1) * square_size, # space.border is initialized using this definition~
- Inside source: true
*** True Line Result
          board_left + x.add(1) * square_size, # space.border is initialized using this definition
** Processing line: ~          board_top  + y.add(1) * square_size,~
- Inside source: true
*** True Line Result
          board_top  + y.add(1) * square_size,
** Processing line: ~          square_size,~
- Inside source: true
*** True Line Result
          square_size,
** Processing line: ~          square_size~
- Inside source: true
*** True Line Result
          square_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: ~      # Again, the calculations ensure that the piece is placed in the center of the grid square.~
- Inside source: true
*** True Line Result
      # Again, the calculations ensure that the piece is placed in the center of the grid square.
** Processing line: ~      # Remove the '- 20' and the piece will be placed at the top of the grid square instead of the center.~
- Inside source: true
*** True Line Result
      # Remove the '- 20' and the piece will be placed at the top of the grid square instead of the center.
** Processing line: ~      outputs.labels << filled_spaces do |x, y, space| # put label in each filled space of board~
- Inside source: true
*** True Line Result
      outputs.labels << filled_spaces do |x, y, space| # put label in each filled space of board
** Processing line: ~            label board_left + x.add(1) * square_size + square_size.fdiv(2),~
- Inside source: true
*** True Line Result
            label board_left + x.add(1) * square_size + square_size.fdiv(2),
** Processing line: ~            board_top  + y.add(1) * square_size + square_size - 20,~
- Inside source: true
*** True Line Result
            board_top  + y.add(1) * square_size + square_size - 20,
** Processing line: ~            space.piece # text of label, either "x" or "o"~
- Inside source: true
*** True Line Result
            space.piece # text of label, either "x" or "o"
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # Uses a label to output whether x or o won, or if a draw occurred.~
- Inside source: true
*** True Line Result
      # Uses a label to output whether x or o won, or if a draw occurred.
** Processing line: ~      # If the game is ongoing, a label shows whose turn it currently is.~
- Inside source: true
*** True Line Result
      # If the game is ongoing, a label shows whose turn it currently is.
** Processing line: ~      outputs.labels << if state.x_won~
- Inside source: true
*** True Line Result
      outputs.labels << if state.x_won
** Processing line: ~                          label grid.w_half, grid.top - 80, "x won" # the '-80' positions the label 80 pixels lower than top~
- Inside source: true
*** True Line Result
                          label grid.w_half, grid.top - 80, "x won" # the '-80' positions the label 80 pixels lower than top
** Processing line: ~                        elsif state.o_won~
- Inside source: true
*** True Line Result
                        elsif state.o_won
** Processing line: ~                          label grid.w_half, grid.top - 80, "o won" # grid.w_half positions the label in the center horizontally~
- Inside source: true
*** True Line Result
                          label grid.w_half, grid.top - 80, "o won" # grid.w_half positions the label in the center horizontally
** Processing line: ~                        elsif state.draw~
- Inside source: true
*** True Line Result
                        elsif state.draw
** Processing line: ~                          label grid.w_half, grid.top - 80, "a draw"~
- Inside source: true
*** True Line Result
                          label grid.w_half, grid.top - 80, "a draw"
** Processing line: ~                        else # if no one won and the game is ongoing~
- Inside source: true
*** True Line Result
                        else # if no one won and the game is ongoing
** Processing line: ~                          label grid.w_half, grid.top - 80, "turn: #{state.current_turn}"~
- Inside source: true
*** True Line Result
                          label grid.w_half, grid.top - 80, "turn: #{state.current_turn}"
** Processing line: ~                        end~
- Inside source: true
*** 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 the methods responsible for handling user input and determining the winner.~
- Inside source: true
*** True Line Result
    # Calls the methods responsible for handling user input and determining the winner.
** Processing line: ~    # Does nothing unless the mouse is clicked.~
- Inside source: true
*** True Line Result
    # Does nothing unless the mouse is clicked.
** Processing line: ~    def input_board~
- Inside source: true
*** True Line Result
    def input_board
** Processing line: ~      return unless inputs.mouse.click~
- Inside source: true
*** True Line Result
      return unless inputs.mouse.click
** Processing line: ~      input_place_piece~
- Inside source: true
*** True Line Result
      input_place_piece
** Processing line: ~      input_restart_game~
- Inside source: true
*** True Line Result
      input_restart_game
** Processing line: ~      determine_winner~
- Inside source: true
*** True Line Result
      determine_winner
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # Handles user input for placing pieces on the board.~
- Inside source: true
*** True Line Result
    # Handles user input for placing pieces on the board.
** Processing line: ~    def input_place_piece~
- Inside source: true
*** True Line Result
    def input_place_piece
** Processing line: ~      return if state.game_over~
- Inside source: true
*** True Line Result
      return if state.game_over
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # Checks to find the space that the mouse was clicked inside of, and makes sure the space does not already~
- Inside source: true
*** True Line Result
      # Checks to find the space that the mouse was clicked inside of, and makes sure the space does not already
** Processing line: ~      # have a piece in it.~
- Inside source: true
*** True Line Result
      # have a piece in it.
** Processing line: ~      __, __, space = all_spaces.find do |__, __, space|~
- Inside source: true
*** True Line Result
      __, __, space = all_spaces.find do |__, __, space|
** Processing line: ~        inputs.mouse.click.point.inside_rect?(space.border) && !space.piece~
- Inside source: true
*** True Line Result
        inputs.mouse.click.point.inside_rect?(space.border) && !space.piece
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # The piece that goes into the space belongs to the player whose turn it currently is.~
- Inside source: true
*** True Line Result
      # The piece that goes into the space belongs to the player whose turn it currently is.
** Processing line: ~      return unless space~
- Inside source: true
*** True Line Result
      return unless space
** Processing line: ~      space.piece = state.current_turn~
- Inside source: true
*** True Line Result
      space.piece = state.current_turn
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # This ternary operator statement allows us to change the current player's turn.~
- Inside source: true
*** True Line Result
      # This ternary operator statement allows us to change the current player's turn.
** Processing line: ~      # If it is currently x's turn, it becomes o's turn. If it is not x's turn, it become's x's turn.~
- Inside source: true
*** True Line Result
      # If it is currently x's turn, it becomes o's turn. If it is not x's turn, it become's x's turn.
** Processing line: ~      state.current_turn = state.current_turn == :x ? :o : :x~
- Inside source: true
*** True Line Result
      state.current_turn = state.current_turn == :x ? :o : :x
** 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 input_restart_game~
- Inside source: true
*** True Line Result
    def input_restart_game
** Processing line: ~      return unless state.game_over~
- Inside source: true
*** True Line Result
      return unless state.game_over
** Processing line: ~      gtk.reset~
- Inside source: true
*** True Line Result
      gtk.reset
** Processing line: ~      init_new_game~
- Inside source: true
*** True Line Result
      init_new_game
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # Checks if x or o won the game.~
- Inside source: true
*** True Line Result
    # Checks if x or o won the game.
** Processing line: ~    # If neither player wins and all nine squares are filled, a draw happens.~
- Inside source: true
*** True Line Result
    # If neither player wins and all nine squares are filled, a draw happens.
** Processing line: ~    # Once a player is chosen as the winner or a draw happens, the game is over.~
- Inside source: true
*** True Line Result
    # Once a player is chosen as the winner or a draw happens, the game is over.
** Processing line: ~    def determine_winner~
- Inside source: true
*** True Line Result
    def determine_winner
** Processing line: ~      state.x_won = won? :x # evaluates to either true or false (boolean values)~
- Inside source: true
*** True Line Result
      state.x_won = won? :x # evaluates to either true or false (boolean values)
** Processing line: ~      state.o_won = won? :o~
- Inside source: true
*** True Line Result
      state.o_won = won? :o
** Processing line: ~      state.draw = true if filled_spaces.length == 9 && !state.x_won && !state.o_won~
- Inside source: true
*** True Line Result
      state.draw = true if filled_spaces.length == 9 && !state.x_won && !state.o_won
** Processing line: ~      state.game_over = state.x_won || state.o_won || state.draw~
- Inside source: true
*** True Line Result
      state.game_over = state.x_won || state.o_won || state.draw
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # Determines if a player won by checking if there is a horizontal match or vertical match.~
- Inside source: true
*** True Line Result
    # Determines if a player won by checking if there is a horizontal match or vertical match.
** Processing line: ~    # Horizontal_match and vertical_match have boolean values. If either is true, the game has been won.~
- Inside source: true
*** True Line Result
    # Horizontal_match and vertical_match have boolean values. If either is true, the game has been won.
** Processing line: ~    def won? piece~
- Inside source: true
*** True Line Result
    def won? piece
** Processing line: ~      # performs action on all space combinations~
- Inside source: true
*** True Line Result
      # performs action on all space combinations
** Processing line: ~      won = [[-1, 0, 1]].product([-1, 0, 1]).map do |xs, y|~
- Inside source: true
*** True Line Result
      won = [[-1, 0, 1]].product([-1, 0, 1]).map do |xs, y|
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        # Checks if the 3 grid spaces with the same y value (or same row) and~
- Inside source: true
*** True Line Result
        # Checks if the 3 grid spaces with the same y value (or same row) and
** Processing line: ~        # x values that are next to each other have pieces that belong to the same player.~
- Inside source: true
*** True Line Result
        # x values that are next to each other have pieces that belong to the same player.
** Processing line: ~        # Remember, the value of piece is equal to the current turn (which is the player).~
- Inside source: true
*** True Line Result
        # Remember, the value of piece is equal to the current turn (which is the player).
** Processing line: ~        horizontal_match = state.spaces[xs[0]][y].piece == piece &&~
- Inside source: true
*** True Line Result
        horizontal_match = state.spaces[xs[0]][y].piece == piece &&
** Processing line: ~                           state.spaces[xs[1]][y].piece == piece &&~
- Inside source: true
*** True Line Result
                           state.spaces[xs[1]][y].piece == piece &&
** Processing line: ~                           state.spaces[xs[2]][y].piece == piece~
- Inside source: true
*** True Line Result
                           state.spaces[xs[2]][y].piece == piece
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        # Checks if the 3 grid spaces with the same x value (or same column) and~
- Inside source: true
*** True Line Result
        # Checks if the 3 grid spaces with the same x value (or same column) and
** Processing line: ~        # y values that are next to each other have pieces that belong to the same player.~
- Inside source: true
*** True Line Result
        # y values that are next to each other have pieces that belong to the same player.
** Processing line: ~        # The && represents an "and" statement: if even one part of the statement is false,~
- Inside source: true
*** True Line Result
        # The && represents an "and" statement: if even one part of the statement is false,
** Processing line: ~        # the entire statement evaluates to false.~
- Inside source: true
*** True Line Result
        # the entire statement evaluates to false.
** Processing line: ~        vertical_match = state.spaces[y][xs[0]].piece == piece &&~
- Inside source: true
*** True Line Result
        vertical_match = state.spaces[y][xs[0]].piece == piece &&
** Processing line: ~                         state.spaces[y][xs[1]].piece == piece &&~
- Inside source: true
*** True Line Result
                         state.spaces[y][xs[1]].piece == piece &&
** Processing line: ~                         state.spaces[y][xs[2]].piece == piece~
- Inside source: true
*** True Line Result
                         state.spaces[y][xs[2]].piece == piece
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        horizontal_match || vertical_match # if either is true, true is returned~
- Inside source: true
*** True Line Result
        horizontal_match || vertical_match # if either is true, true is returned
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # Sees if there is a diagonal match, starting from the bottom left and ending at the top right.~
- Inside source: true
*** True Line Result
      # Sees if there is a diagonal match, starting from the bottom left and ending at the top right.
** Processing line: ~      # Is added to won regardless of whether the statement is true or false.~
- Inside source: true
*** True Line Result
      # Is added to won regardless of whether the statement is true or false.
** Processing line: ~      won << (state.spaces[-1][-1].piece == piece && # bottom left~
- Inside source: true
*** True Line Result
      won << (state.spaces[-1][-1].piece == piece && # bottom left
** Processing line: ~              state.spaces[ 0][ 0].piece == piece && # center~
- Inside source: true
*** True Line Result
              state.spaces[ 0][ 0].piece == piece && # center
** Processing line: ~              state.spaces[ 1][ 1].piece == piece)   # top right~
- Inside source: true
*** True Line Result
              state.spaces[ 1][ 1].piece == piece)   # top right
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # Sees if there is a diagonal match, starting at the bottom right and ending at the top left~
- Inside source: true
*** True Line Result
      # Sees if there is a diagonal match, starting at the bottom right and ending at the top left
** Processing line: ~      # and is added to won.~
- Inside source: true
*** True Line Result
      # and is added to won.
** Processing line: ~      won << (state.spaces[ 1][-1].piece == piece && # bottom right~
- Inside source: true
*** True Line Result
      won << (state.spaces[ 1][-1].piece == piece && # bottom right
** Processing line: ~              state.spaces[ 0][ 0].piece == piece && # center~
- Inside source: true
*** True Line Result
              state.spaces[ 0][ 0].piece == piece && # center
** Processing line: ~              state.spaces[-1][ 1].piece == piece)   # top left~
- Inside source: true
*** True Line Result
              state.spaces[-1][ 1].piece == piece)   # top left
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # Any false statements (meaning false diagonal matches) are rejected from won~
- Inside source: true
*** True Line Result
      # Any false statements (meaning false diagonal matches) are rejected from won
** Processing line: ~      won.reject_false.any?~
- Inside source: true
*** True Line Result
      won.reject_false.any?
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # Defines filled spaces on the board by rejecting all spaces that do not have game pieces in them.~
- Inside source: true
*** True Line Result
    # Defines filled spaces on the board by rejecting all spaces that do not have game pieces in them.
** Processing line: ~    # The ! before a statement means "not". For example, we are rejecting any space combinations that do~
- Inside source: true
*** True Line Result
    # The ! before a statement means "not". For example, we are rejecting any space combinations that do
** Processing line: ~    # NOT have pieces in them.~
- Inside source: true
*** True Line Result
    # NOT have pieces in them.
** Processing line: ~    def filled_spaces~
- Inside source: true
*** True Line Result
    def filled_spaces
** Processing line: ~      state.space_combinations~
- Inside source: true
*** True Line Result
      state.space_combinations
** Processing line: ~        .reject { |x, y| !state.spaces[x][y].piece } # reject spaces with no pieces in them~
- Inside source: true
*** True Line Result
        .reject { |x, y| !state.spaces[x][y].piece } # reject spaces with no pieces in them
** Processing line: ~        .map do |x, y|~
- Inside source: true
*** True Line Result
        .map do |x, y|
** Processing line: ~          if block_given?~
- Inside source: true
*** True Line Result
          if block_given?
** Processing line: ~            yield x, y, state.spaces[x][y]~
- Inside source: true
*** True Line Result
            yield x, y, state.spaces[x][y]
** Processing line: ~          else~
- Inside source: true
*** True Line Result
          else
** Processing line: ~            [x, y, state.spaces[x][y]] # sets definition of space~
- Inside source: true
*** True Line Result
            [x, y, state.spaces[x][y]] # sets definition of space
** 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: ~    # Defines all spaces on the board.~
- Inside source: true
*** True Line Result
    # Defines all spaces on the board.
** Processing line: ~    def all_spaces~
- Inside source: true
*** True Line Result
    def all_spaces
** Processing line: ~      if !block_given?~
- Inside source: true
*** True Line Result
      if !block_given?
** Processing line: ~        state.space_combinations.map do |x, y|~
- Inside source: true
*** True Line Result
        state.space_combinations.map do |x, y|
** Processing line: ~          [x, y, state.spaces[x][y]] # sets definition of space~
- Inside source: true
*** True Line Result
          [x, y, state.spaces[x][y]] # sets definition of space
** Processing line: ~        end~
- Inside source: true
*** True Line Result
        end
** Processing line: ~      else # if a block is given (block_given? is true)~
- Inside source: true
*** True Line Result
      else # if a block is given (block_given? is true)
** Processing line: ~        state.space_combinations.map do |x, y|~
- Inside source: true
*** True Line Result
        state.space_combinations.map do |x, y|
** Processing line: ~          yield x, y, state.spaces[x][y] # yield if a block is given~
- Inside source: true
*** True Line Result
          yield x, y, state.spaces[x][y] # yield if a block is given
** 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: ~    # Sets values for a label, such as the position, value, size, alignment, and color.~
- Inside source: true
*** True Line Result
    # Sets values for a label, such as the position, value, size, alignment, and color.
** Processing line: ~    def label x, y, value~
- Inside source: true
*** True Line Result
    def label x, y, value
** Processing line: ~      [x, y + 10, value, 20, 1, 0, 0, 0]~
- Inside source: true
*** True Line Result
      [x, y + 10, value, 20, 1, 0, 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: ~  $tic_tac_toe = TicTacToe.new~
- Inside source: true
*** True Line Result
  $tic_tac_toe = TicTacToe.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: ~    $tic_tac_toe._       = args~
- Inside source: true
*** True Line Result
    $tic_tac_toe._       = args
** Processing line: ~    $tic_tac_toe.state   = args.state~
- Inside source: true
*** True Line Result
    $tic_tac_toe.state   = args.state
** Processing line: ~    $tic_tac_toe.outputs = args.outputs~
- Inside source: true
*** True Line Result
    $tic_tac_toe.outputs = args.outputs
** Processing line: ~    $tic_tac_toe.inputs  = args.inputs~
- Inside source: true
*** True Line Result
    $tic_tac_toe.inputs  = args.inputs
** Processing line: ~    $tic_tac_toe.grid    = args.grid~
- Inside source: true
*** True Line Result
    $tic_tac_toe.grid    = args.grid
** Processing line: ~    $tic_tac_toe.gtk     = args.gtk~
- Inside source: true
*** True Line Result
    $tic_tac_toe.gtk     = args.gtk
** Processing line: ~    $tic_tac_toe.tick~
- Inside source: true
*** True Line Result
    $tic_tac_toe.tick
** Processing line: ~    tick_instructions args, "Sample app shows how to work with mouse clicks."~
- Inside source: true
*** True Line Result
    tick_instructions args, "Sample app shows how to work with mouse clicks."
** 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 - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Mouse - Mouse Move - 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/02_mouse_move/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/05_mouse/02_mouse_move/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: ~   - 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: ~   - 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: ~     For example, in this sample app, we're using find_all to find all zombies that have intersected~
- Inside source: true
*** True Line Result
     For example, in this sample app, we're using find_all to find all zombies that have intersected
** Processing line: ~     or hit the player's sprite since these zombies have been killed.~
- Inside source: true
*** True Line Result
     or hit the player's sprite since these zombies have been killed.
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~   - args.inputs.keyboard.key_down.KEY: Determines if a key is being held or pressed.~
- Inside source: true
*** True Line Result
   - args.inputs.keyboard.key_down.KEY: Determines if a key is being held or pressed.
** Processing line: ~     Stores the frame the "down" event occurred.~
- Inside source: true
*** True Line Result
     Stores the frame the "down" event occurred.
** 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.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.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: ~     When we want to create a new object, we can declare it as a new entity and then define~
- Inside source: true
*** True Line Result
     When we want to create a new object, we can declare it as a new entity and then define
** Processing line: ~     its properties. (Remember, you can use state to define ANY property and it will~
- Inside source: true
*** True Line Result
     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: ~   - 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: ~   - 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: ~   - sample: Chooses a random element from the array.~
- Inside source: true
*** True Line Result
   - sample: Chooses a random element from the array.
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~   - reject: Removes elements that meet certain requirements.~
- Inside source: true
*** True Line Result
   - reject: Removes elements that meet certain requirements.
** Processing line: ~     In this sample app, we're removing/rejecting zombies that reach the center of the screen. We're also~
- Inside source: true
*** True Line Result
     In this sample app, we're removing/rejecting zombies that reach the center of the screen. We're also
** Processing line: ~     rejecting zombies that were killed more than 30 frames ago.~
- Inside source: true
*** True Line Result
     rejecting zombies that were killed more than 30 frames ago.
** 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 move around the screen in order to kill zombies. Zombies appear from every direction so the goal~
- Inside source: true
*** True Line Result
  # This sample app allows users to move around the screen in order to kill zombies. Zombies appear from every direction so the goal
** Processing line: ~  # is to kill the zombies as fast as possible!~
- Inside source: true
*** True Line Result
  # is to kill the zombies as fast as possible!
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~  class ProtectThePuppiesFromTheZombies~
- Inside source: true
*** True Line Result
  class ProtectThePuppiesFromTheZombies
** 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 the methods necessary for the game to run properly.~
- Inside source: true
*** True Line Result
    # Calls the methods necessary 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~
- 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: ~    # Sets default values for the zombies and for the player.~
- Inside source: true
*** True Line Result
    # Sets default values for the zombies and for the player.
** Processing line: ~    # Initialization happens only in the first frame.~
- Inside source: true
*** True Line Result
    # Initialization happens only in the first frame.
** Processing line: ~    def defaults~
- Inside source: true
*** True Line Result
    def defaults
** Processing line: ~      state.flash_at               ||= 0~
- Inside source: true
*** True Line Result
      state.flash_at               ||= 0
** Processing line: ~      state.zombie_min_spawn_rate  ||= 60~
- Inside source: true
*** True Line Result
      state.zombie_min_spawn_rate  ||= 60
** 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.zombies                ||= []~
- Inside source: true
*** True Line Result
      state.zombies                ||= []
** Processing line: ~      state.killed_zombies         ||= []~
- Inside source: true
*** True Line Result
      state.killed_zombies         ||= []
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # Declares player as a new entity and sets its properties.~
- Inside source: true
*** True Line Result
      # Declares player as a new entity and sets its properties.
** Processing line: ~      # The player begins the game in the center of the screen, not moving in any direction.~
- Inside source: true
*** True Line Result
      # The player begins the game in the center of the screen, not moving in any direction.
** Processing line: ~      state.player ||= state.new_entity(:player, { x: 640,~
- Inside source: true
*** True Line Result
      state.player ||= state.new_entity(:player, { x: 640,
** Processing line: ~                                                 y: 360,~
- Inside source: true
*** True Line Result
                                                 y: 360,
** Processing line: ~                                                 attack_angle: 0,~
- Inside source: true
*** True Line Result
                                                 attack_angle: 0,
** 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: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # Outputs a gray background.~
- Inside source: true
*** True Line Result
    # Outputs a gray background.
** Processing line: ~    # Calls the methods needed to output the player, zombies, etc onto the screen.~
- Inside source: true
*** True Line Result
    # Calls the methods needed to output the player, zombies, etc onto the screen.
** Processing line: ~    def render~
- Inside source: true
*** True Line Result
    def render
** Processing line: ~      outputs.solids << [grid.rect, 100, 100, 100]~
- Inside source: true
*** True Line Result
      outputs.solids << [grid.rect, 100, 100, 100]
** Processing line: ~      render_zombies~
- Inside source: true
*** True Line Result
      render_zombies
** Processing line: ~      render_killed_zombies~
- Inside source: true
*** True Line Result
      render_killed_zombies
** Processing line: ~      render_player~
- Inside source: true
*** True Line Result
      render_player
** 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: ~    # Outputs the zombies on the screen and sets values for the sprites, such as the position, width, height, and animation.~
- Inside source: true
*** True Line Result
    # Outputs the zombies on the screen and sets values for the sprites, such as the position, width, height, and animation.
** Processing line: ~    def render_zombies~
- Inside source: true
*** True Line Result
    def render_zombies
** Processing line: ~      outputs.sprites << state.zombies.map do |z| # performs action on all zombies in the collection~
- Inside source: true
*** True Line Result
      outputs.sprites << state.zombies.map do |z| # performs action on all zombies in the collection
** Processing line: ~        z.sprite = [z.x, z.y, 4 * 3, 8 * 3, animation_sprite(z)].sprite # sets definition for sprite, calls animation_sprite method~
- Inside source: true
*** True Line Result
        z.sprite = [z.x, z.y, 4 * 3, 8 * 3, animation_sprite(z)].sprite # sets definition for sprite, calls animation_sprite method
** Processing line: ~        z.sprite~
- Inside source: true
*** True Line Result
        z.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 sprites of killed zombies, and displays a slash image to show that a zombie has been killed.~
- Inside source: true
*** True Line Result
    # Outputs sprites of killed zombies, and displays a slash image to show that a zombie has been killed.
** Processing line: ~    def render_killed_zombies~
- Inside source: true
*** True Line Result
    def render_killed_zombies
** Processing line: ~      outputs.sprites << state.killed_zombies.map do |z| # performs action on all killed zombies in collection~
- Inside source: true
*** True Line Result
      outputs.sprites << state.killed_zombies.map do |z| # performs action on all killed zombies in collection
** Processing line: ~        z.sprite = [z.x,~
- Inside source: true
*** True Line Result
        z.sprite = [z.x,
** Processing line: ~                    z.y,~
- Inside source: true
*** True Line Result
                    z.y,
** Processing line: ~                    4 * 3,~
- Inside source: true
*** True Line Result
                    4 * 3,
** Processing line: ~                    8 * 3,~
- Inside source: true
*** True Line Result
                    8 * 3,
** Processing line: ~                    animation_sprite(z, z.death_at), # calls animation_sprite method~
- Inside source: true
*** True Line Result
                    animation_sprite(z, z.death_at), # calls animation_sprite method
** Processing line: ~                    0, # angle~
- Inside source: true
*** True Line Result
                    0, # angle
** Processing line: ~                    255 * z.death_at.ease(30, :flip)].sprite # transparency of a zombie changes when they die~
- Inside source: true
*** True Line Result
                    255 * z.death_at.ease(30, :flip)].sprite # transparency of a zombie changes when they die
** Processing line: ~                    # change the value of 30 and see what happens when a zombie is killed~
- Inside source: true
*** True Line Result
                    # change the value of 30 and see what happens when a zombie is killed
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        # Sets values to output the slash over the zombie's sprite when a zombie is killed.~
- Inside source: true
*** True Line Result
        # Sets values to output the slash over the zombie's sprite when a zombie is killed.
** Processing line: ~        # The slash is tilted 45 degrees from the angle of the player's attack.~
- Inside source: true
*** True Line Result
        # The slash is tilted 45 degrees from the angle of the player's attack.
** Processing line: ~        # Change the 3 inside scale_rect to 30 and the slash will be HUGE! Scale_rect positions~
- Inside source: true
*** True Line Result
        # Change the 3 inside scale_rect to 30 and the slash will be HUGE! Scale_rect positions
** Processing line: ~        # the slash over the killed zombie's sprite.~
- Inside source: true
*** True Line Result
        # the slash over the killed zombie's sprite.
** Processing line: ~        [z.sprite, [z.sprite.rect, 'sprites/slash.png', 45 + state.player.attack_angle_on_click, z.sprite.a].scale_rect(3, 0.5, 0.5)]~
- Inside source: true
*** True Line Result
        [z.sprite, [z.sprite.rect, 'sprites/slash.png', 45 + state.player.attack_angle_on_click, z.sprite.a].scale_rect(3, 0.5, 0.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: ~    # Outputs the player sprite using the images in the sprites folder.~
- Inside source: true
*** True Line Result
    # Outputs the player sprite using the images in the sprites folder.
** Processing line: ~    def render_player~
- Inside source: true
*** True Line Result
    def render_player
** Processing line: ~      state.player_sprite = [state.player.x,~
- Inside source: true
*** True Line Result
      state.player_sprite = [state.player.x,
** Processing line: ~                             state.player.y,~
- Inside source: true
*** True Line Result
                             state.player.y,
** Processing line: ~                            4 * 3,~
- Inside source: true
*** True Line Result
                            4 * 3,
** Processing line: ~                            8 * 3, "sprites/player-#{animation_index(state.player.created_at_elapsed)}.png"] # string interpolation~
- Inside source: true
*** True Line Result
                            8 * 3, "sprites/player-#{animation_index(state.player.created_at_elapsed)}.png"] # string interpolation
** Processing line: ~      outputs.sprites << state.player_sprite~
- Inside source: true
*** True Line Result
      outputs.sprites << state.player_sprite
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # Outputs a small red square that previews the angles that the player can attack in.~
- Inside source: true
*** True Line Result
      # Outputs a small red square that previews the angles that the player can attack in.
** Processing line: ~      # It can be moved in a perfect circle around the player to show possible movements.~
- Inside source: true
*** True Line Result
      # It can be moved in a perfect circle around the player to show possible movements.
** Processing line: ~      # Change the 60 in the parenthesis and see what happens to the movement of the red square.~
- Inside source: true
*** True Line Result
      # Change the 60 in the parenthesis and see what happens to the movement of the red square.
** Processing line: ~      outputs.solids <<  [state.player.x + state.player.attack_angle.vector_x(60),~
- Inside source: true
*** True Line Result
      outputs.solids <<  [state.player.x + state.player.attack_angle.vector_x(60),
** Processing line: ~                          state.player.y + state.player.attack_angle.vector_y(60),~
- Inside source: true
*** True Line Result
                          state.player.y + state.player.attack_angle.vector_y(60),
** Processing line: ~                          3, 3, 255, 0, 0]~
- Inside source: true
*** True Line Result
                          3, 3, 255, 0, 0]
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # Renders flash as a solid. The screen turns white for 10 frames when a zombie is killed.~
- Inside source: true
*** True Line Result
    # Renders flash as a solid. The screen turns white for 10 frames when a zombie is killed.
** Processing line: ~    def render_flash~
- Inside source: true
*** True Line Result
    def render_flash
** Processing line: ~      return if state.flash_at.elapsed_time > 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: ~*** Advanced Rendering - Lighting - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Advanced Rendering - Lighting - 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/12_lighting/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/07_advanced_rendering/12_lighting/app/main.rb
** Processing line: ~  def calc args~
- Inside source: true
*** True Line Result
  def calc args
** Processing line: ~    args.state.swinging_light_sign     ||= 1~
- Inside source: true
*** True Line Result
    args.state.swinging_light_sign     ||= 1
** Processing line: ~    args.state.swinging_light_start_at ||= 0~
- Inside source: true
*** True Line Result
    args.state.swinging_light_start_at ||= 0
** Processing line: ~    args.state.swinging_light_duration ||= 300~
- Inside source: true
*** True Line Result
    args.state.swinging_light_duration ||= 300
** Processing line: ~    args.state.swinging_light_perc       = args.state~
- Inside source: true
*** True Line Result
    args.state.swinging_light_perc       = args.state
** Processing line: ~                                               .swinging_light_start_at~
- Inside source: true
*** True Line Result
                                               .swinging_light_start_at
** Processing line: ~                                               .ease_spline_extended args.state.tick_count,~
- Inside source: true
*** True Line Result
                                               .ease_spline_extended args.state.tick_count,
** Processing line: ~                                                                     args.state.swinging_light_duration,~
- Inside source: true
*** True Line Result
                                                                     args.state.swinging_light_duration,
** Processing line: ~                                                                     [~
- Inside source: true
*** True Line Result
                                                                     [
** Processing line: ~                                                                       [0.0, 1.0, 1.0, 1.0],~
- Inside source: true
*** True Line Result
                                                                       [0.0, 1.0, 1.0, 1.0],
** Processing line: ~                                                                       [1.0, 1.0, 1.0, 0.0]~
- Inside source: true
*** True Line Result
                                                                       [1.0, 1.0, 1.0, 0.0]
** Processing line: ~                                                                     ]~
- Inside source: true
*** True Line Result
                                                                     ]
** Processing line: ~    args.state.max_swing_angle ||= 45~
- Inside source: true
*** True Line Result
    args.state.max_swing_angle ||= 45
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    if args.state.swinging_light_start_at.elapsed_time > args.state.swinging_light_duration~
- Inside source: true
*** True Line Result
    if args.state.swinging_light_start_at.elapsed_time > args.state.swinging_light_duration
** Processing line: ~      args.state.swinging_light_start_at = args.state.tick_count~
- Inside source: true
*** True Line Result
      args.state.swinging_light_start_at = args.state.tick_count
** Processing line: ~      args.state.swinging_light_sign *= -1~
- Inside source: true
*** True Line Result
      args.state.swinging_light_sign *= -1
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.state.swinging_light_angle = 360 + ((args.state.max_swing_angle * args.state.swinging_light_perc) * args.state.swinging_light_sign)~
- Inside source: true
*** True Line Result
    args.state.swinging_light_angle = 360 + ((args.state.max_swing_angle * args.state.swinging_light_perc) * args.state.swinging_light_sign)
** 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.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: ~    # render scene~
- Inside source: true
*** True Line Result
    # render scene
** Processing line: ~    args.outputs[:scene].sprites << { x:        0, y:   0, w: 1280, h: 720, path: :pixel }~
- Inside source: true
*** True Line Result
    args.outputs[:scene].sprites << { x:        0, y:   0, w: 1280, h: 720, path: :pixel }
** Processing line: ~    args.outputs[:scene].sprites << { x: 640 - 40, y: 100, w:   80, h:  80, path: 'sprites/square/blue.png' }~
- Inside source: true
*** True Line Result
    args.outputs[:scene].sprites << { x: 640 - 40, y: 100, w:   80, h:  80, path: 'sprites/square/blue.png' }
** Processing line: ~    args.outputs[:scene].sprites << { x: 640 - 40, y: 200, w:   80, h:  80, path: 'sprites/square/blue.png' }~
- Inside source: true
*** True Line Result
    args.outputs[:scene].sprites << { x: 640 - 40, y: 200, w:   80, h:  80, path: 'sprites/square/blue.png' }
** Processing line: ~    args.outputs[:scene].sprites << { x: 640 - 40, y: 300, w:   80, h:  80, path: 'sprites/square/blue.png' }~
- Inside source: true
*** True Line Result
    args.outputs[:scene].sprites << { x: 640 - 40, y: 300, w:   80, h:  80, path: 'sprites/square/blue.png' }
** Processing line: ~    args.outputs[:scene].sprites << { x: 640 - 40, y: 400, w:   80, h:  80, path: 'sprites/square/blue.png' }~
- Inside source: true
*** True Line Result
    args.outputs[:scene].sprites << { x: 640 - 40, y: 400, w:   80, h:  80, path: 'sprites/square/blue.png' }
** Processing line: ~    args.outputs[:scene].sprites << { x: 640 - 40, y: 500, w:   80, h:  80, path: 'sprites/square/blue.png' }~
- Inside source: true
*** True Line Result
    args.outputs[:scene].sprites << { x: 640 - 40, y: 500, w:   80, h:  80, path: 'sprites/square/blue.png' }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # render light~
- Inside source: true
*** True Line Result
    # render light
** Processing line: ~    swinging_light_w = 1100~
- Inside source: true
*** True Line Result
    swinging_light_w = 1100
** Processing line: ~    args.outputs[:lights].background_color = [0, 0, 0, 0]~
- Inside source: true
*** True Line Result
    args.outputs[:lights].background_color = [0, 0, 0, 0]
** Processing line: ~    args.outputs[:lights].sprites << { x: 640 - swinging_light_w.half,~
- Inside source: true
*** True Line Result
    args.outputs[:lights].sprites << { x: 640 - swinging_light_w.half,
** Processing line: ~                                       y: -1300,~
- Inside source: true
*** True Line Result
                                       y: -1300,
** Processing line: ~                                       w: swinging_light_w,~
- Inside source: true
*** True Line Result
                                       w: swinging_light_w,
** Processing line: ~                                       h: 3000,~
- Inside source: true
*** True Line Result
                                       h: 3000,
** 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: ~                                       path: "sprites/lights/mask.png",~
- Inside source: true
*** True Line Result
                                       path: "sprites/lights/mask.png",
** Processing line: ~                                       angle: args.state.swinging_light_angle }~
- Inside source: true
*** True Line Result
                                       angle: args.state.swinging_light_angle }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs[:lights].sprites << { x: args.inputs.mouse.x - 400,~
- Inside source: true
*** True Line Result
    args.outputs[:lights].sprites << { x: args.inputs.mouse.x - 400,
** Processing line: ~                                       y: args.inputs.mouse.y - 400,~
- Inside source: true
*** True Line Result
                                       y: args.inputs.mouse.y - 400,
** Processing line: ~                                       w: 800,~
- Inside source: true
*** True Line Result
                                       w: 800,
** Processing line: ~                                       h: 800,~
- Inside source: true
*** True Line Result
                                       h: 800,
** Processing line: ~                                       path: "sprites/lights/mask.png" }~
- Inside source: true
*** True Line Result
                                       path: "sprites/lights/mask.png" }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # merge unlighted scene with lights~
- Inside source: true
*** True Line Result
    # merge unlighted scene with lights
** Processing line: ~    args.outputs[:lighted_scene].sprites << { x: 0, y: 0, w: 1280, h: 720, path: :lights, blendmode_enum: 0 }~
- Inside source: true
*** True Line Result
    args.outputs[:lighted_scene].sprites << { x: 0, y: 0, w: 1280, h: 720, path: :lights, blendmode_enum: 0 }
** Processing line: ~    args.outputs[:lighted_scene].sprites << { blendmode_enum: 2, x: 0, y: 0, w: 1280, h: 720, path: :scene }~
- Inside source: true
*** True Line Result
    args.outputs[:lighted_scene].sprites << { blendmode_enum: 2, x: 0, y: 0, w: 1280, h: 720, path: :scene }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # output lighted scene to main canvas~
- Inside source: true
*** True Line Result
    # output lighted scene to main canvas
** Processing line: ~    args.outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: :lighted_scene }~
- Inside source: true
*** True Line Result
    args.outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: :lighted_scene }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # render lights and scene render_targets as a mini map~
- Inside source: true
*** True Line Result
    # render lights and scene render_targets as a mini map
** Processing line: ~    args.outputs.debug  << { x: 16,      y: (16 + 90).from_top, w: 160, h: 90, r: 255, g: 255, b: 255 }.solid!~
- Inside source: true
*** True Line Result
    args.outputs.debug  << { x: 16,      y: (16 + 90).from_top, w: 160, h: 90, r: 255, g: 255, b: 255 }.solid!
** Processing line: ~    args.outputs.debug  << { x: 16,      y: (16 + 90).from_top, w: 160, h: 90, path: :lights }~
- Inside source: true
*** True Line Result
    args.outputs.debug  << { x: 16,      y: (16 + 90).from_top, w: 160, h: 90, path: :lights }
** Processing line: ~    args.outputs.debug  << { x: 16 + 80, y: (16 + 90 + 8).from_top, text: ":lights render_target", r: 255, g: 255, b: 255, size_enum: -3, alignment_enum: 1 }~
- Inside source: true
*** True Line Result
    args.outputs.debug  << { x: 16 + 80, y: (16 + 90 + 8).from_top, text: ":lights render_target", r: 255, g: 255, b: 255, size_enum: -3, alignment_enum: 1 }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.debug  << { x: 16 + 160 + 16,      y: (16 + 90).from_top, w: 160, h: 90, r: 255, g: 255, b: 255 }.solid!~
- Inside source: true
*** True Line Result
    args.outputs.debug  << { x: 16 + 160 + 16,      y: (16 + 90).from_top, w: 160, h: 90, r: 255, g: 255, b: 255 }.solid!
** Processing line: ~    args.outputs.debug  << { x: 16 + 160 + 16,      y: (16 + 90).from_top, w: 160, h: 90, path: :scene }~
- Inside source: true
*** True Line Result
    args.outputs.debug  << { x: 16 + 160 + 16,      y: (16 + 90).from_top, w: 160, h: 90, path: :scene }
** Processing line: ~    args.outputs.debug  << { x: 16 + 160 + 16 + 80, y: (16 + 90 + 8).from_top, text: ":scene render_target", r: 255, g: 255, b: 255, size_enum: -3, alignment_enum: 1 }~
- Inside source: true
*** True Line Result
    args.outputs.debug  << { x: 16 + 160 + 16 + 80, y: (16 + 90 + 8).from_top, text: ":scene render_target", r: 255, g: 255, b: 255, size_enum: -3, alignment_enum: 1 }
** 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 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: ~  $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 - Triangles - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Advanced Rendering - Triangles - 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/13_triangles/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/07_advanced_rendering/13_triangles/app/main.rb
** 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: 640,~
- Inside source: true
*** True Line Result
      x: 640,
** Processing line: ~      y: 30.from_top,~
- Inside source: true
*** True Line Result
      y: 30.from_top,
** Processing line: ~      text: "Triangle rendering is available in Indie and Pro versions (ignored in Standard Edition).",~
- Inside source: true
*** True Line Result
      text: "Triangle rendering is available in Indie and Pro versions (ignored in Standard Edition).",
** 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: ~    dragonruby_logo_width  = 128~
- Inside source: true
*** True Line Result
    dragonruby_logo_width  = 128
** Processing line: ~    dragonruby_logo_height = 101~
- Inside source: true
*** True Line Result
    dragonruby_logo_height = 101
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    row_1 = 400~
- Inside source: true
*** True Line Result
    row_1 = 400
** Processing line: ~    row_2 = 250~
- Inside source: true
*** True Line Result
    row_2 = 250
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.solids << make_triangle(~
- Inside source: true
*** True Line Result
    args.outputs.solids << make_triangle(
** Processing line: ~      640 - dragonruby_logo_width.half - dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      640 - dragonruby_logo_width.half - dragonruby_logo_width,
** Processing line: ~      row_1,~
- Inside source: true
*** True Line Result
      row_1,
** Processing line: ~      640 - dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      640 - dragonruby_logo_width,
** Processing line: ~      row_1 + 101,~
- Inside source: true
*** True Line Result
      row_1 + 101,
** Processing line: ~      640 + dragonruby_logo_width.half - dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      640 + dragonruby_logo_width.half - dragonruby_logo_width,
** Processing line: ~      row_1,~
- Inside source: true
*** True Line Result
      row_1,
** Processing line: ~      0, 128, 128,~
- Inside source: true
*** True Line Result
      0, 128, 128,
** Processing line: ~      128~
- Inside source: true
*** True Line Result
      128
** Processing line: ~    )~
- Inside source: true
*** True Line Result
    )
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.solids << {~
- Inside source: true
*** True Line Result
    args.outputs.solids << {
** Processing line: ~      x:  640 - dragonruby_logo_width.half,~
- Inside source: true
*** True Line Result
      x:  640 - dragonruby_logo_width.half,
** Processing line: ~      y:  row_1,~
- Inside source: true
*** True Line Result
      y:  row_1,
** Processing line: ~      x2: 640,~
- Inside source: true
*** True Line Result
      x2: 640,
** Processing line: ~      y2: row_1 + dragonruby_logo_height,~
- Inside source: true
*** True Line Result
      y2: row_1 + dragonruby_logo_height,
** Processing line: ~      x3: 640 + dragonruby_logo_width.half,~
- Inside source: true
*** True Line Result
      x3: 640 + dragonruby_logo_width.half,
** Processing line: ~      y3: row_1,~
- Inside source: true
*** True Line Result
      y3: row_1,
** Processing line: ~    }~
- Inside source: true
*** True Line Result
    }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.sprites << {~
- Inside source: true
*** True Line Result
    args.outputs.sprites << {
** Processing line: ~      x:  640 - dragonruby_logo_width.half + dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      x:  640 - dragonruby_logo_width.half + dragonruby_logo_width,
** Processing line: ~      y:  row_1,~
- Inside source: true
*** True Line Result
      y:  row_1,
** Processing line: ~      x2: 640 + dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      x2: 640 + dragonruby_logo_width,
** Processing line: ~      y2: row_1 + 101,~
- Inside source: true
*** True Line Result
      y2: row_1 + 101,
** Processing line: ~      x3: 640 + dragonruby_logo_width.half + dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      x3: 640 + dragonruby_logo_width.half + dragonruby_logo_width,
** Processing line: ~      y3: row_1,~
- Inside source: true
*** True Line Result
      y3: row_1,
** Processing line: ~      path: 'dragonruby.png',~
- Inside source: true
*** True Line Result
      path: 'dragonruby.png',
** 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_x2: dragonruby_logo_width.half,~
- Inside source: true
*** True Line Result
      source_x2: dragonruby_logo_width.half,
** Processing line: ~      source_y2: dragonruby_logo_height,~
- Inside source: true
*** True Line Result
      source_y2: dragonruby_logo_height,
** Processing line: ~      source_x3: dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      source_x3: dragonruby_logo_width,
** Processing line: ~      source_y3: 0~
- Inside source: true
*** True Line Result
      source_y3: 0
** Processing line: ~    }~
- Inside source: true
*** True Line Result
    }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.primitives << make_triangle(~
- Inside source: true
*** True Line Result
    args.outputs.primitives << make_triangle(
** Processing line: ~      640 - dragonruby_logo_width.half - dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      640 - dragonruby_logo_width.half - dragonruby_logo_width,
** Processing line: ~      row_2,~
- Inside source: true
*** True Line Result
      row_2,
** Processing line: ~      640 - dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      640 - dragonruby_logo_width,
** Processing line: ~      row_2 + 101,~
- Inside source: true
*** True Line Result
      row_2 + 101,
** Processing line: ~      640 + dragonruby_logo_width.half - dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      640 + dragonruby_logo_width.half - dragonruby_logo_width,
** Processing line: ~      row_2,~
- Inside source: true
*** True Line Result
      row_2,
** Processing line: ~      0, 128, 128,~
- Inside source: true
*** True Line Result
      0, 128, 128,
** Processing line: ~      args.state.tick_count.to_radians.sin_r.abs * 255~
- Inside source: true
*** True Line Result
      args.state.tick_count.to_radians.sin_r.abs * 255
** Processing line: ~    )~
- Inside source: true
*** True Line Result
    )
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.primitives << {~
- Inside source: true
*** True Line Result
    args.outputs.primitives << {
** Processing line: ~      x:  640 - dragonruby_logo_width.half,~
- Inside source: true
*** True Line Result
      x:  640 - dragonruby_logo_width.half,
** Processing line: ~      y:  row_2,~
- Inside source: true
*** True Line Result
      y:  row_2,
** Processing line: ~      x2: 640,~
- Inside source: true
*** True Line Result
      x2: 640,
** Processing line: ~      y2: row_2 + dragonruby_logo_height,~
- Inside source: true
*** True Line Result
      y2: row_2 + dragonruby_logo_height,
** Processing line: ~      x3: 640 + dragonruby_logo_width.half,~
- Inside source: true
*** True Line Result
      x3: 640 + dragonruby_logo_width.half,
** Processing line: ~      y3: row_2,~
- Inside source: true
*** True Line Result
      y3: row_2,
** Processing line: ~      r:  255~
- Inside source: true
*** True Line Result
      r:  255
** Processing line: ~    }~
- Inside source: true
*** True Line Result
    }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.primitives << {~
- Inside source: true
*** True Line Result
    args.outputs.primitives << {
** Processing line: ~      x:  640 - dragonruby_logo_width.half + dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      x:  640 - dragonruby_logo_width.half + dragonruby_logo_width,
** Processing line: ~      y:  row_2,~
- Inside source: true
*** True Line Result
      y:  row_2,
** Processing line: ~      x2: 640 + dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      x2: 640 + dragonruby_logo_width,
** Processing line: ~      y2: row_2 + 101,~
- Inside source: true
*** True Line Result
      y2: row_2 + 101,
** Processing line: ~      x3: 640 + dragonruby_logo_width.half + dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      x3: 640 + dragonruby_logo_width.half + dragonruby_logo_width,
** Processing line: ~      y3: row_2,~
- Inside source: true
*** True Line Result
      y3: row_2,
** Processing line: ~      path: 'dragonruby.png',~
- Inside source: true
*** True Line Result
      path: 'dragonruby.png',
** 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_x2: dragonruby_logo_width.half,~
- Inside source: true
*** True Line Result
      source_x2: dragonruby_logo_width.half,
** Processing line: ~      source_y2: dragonruby_logo_height.half +~
- Inside source: true
*** True Line Result
      source_y2: dragonruby_logo_height.half +
** Processing line: ~                 dragonruby_logo_height.half * Math.sin(args.state.tick_count.to_radians).abs,~
- Inside source: true
*** True Line Result
                 dragonruby_logo_height.half * Math.sin(args.state.tick_count.to_radians).abs,
** Processing line: ~      source_x3: dragonruby_logo_width,~
- Inside source: true
*** True Line Result
      source_x3: dragonruby_logo_width,
** Processing line: ~      source_y3: 0~
- Inside source: true
*** True Line Result
      source_y3: 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 make_triangle *opts~
- Inside source: true
*** True Line Result
  def make_triangle *opts
** Processing line: ~    x, y, x2, y2, x3, y3, r, g, b, a = opts~
- Inside source: true
*** True Line Result
    x, y, x2, y2, x3, y3, r, g, b, a = opts
** Processing line: ~    {~
- Inside source: true
*** True Line Result
    {
** Processing line: ~      x: x, y: y, x2: x2, y2: y2, x3: x3, y3: y3,~
- Inside source: true
*** True Line Result
      x: x, y: y, x2: x2, y2: y2, x3: x3, y3: y3,
** Processing line: ~      r: r || 0,~
- Inside source: true
*** True Line Result
      r: r || 0,
** Processing line: ~      g: g || 0,~
- Inside source: true
*** True Line Result
      g: g || 0,
** Processing line: ~      b: b || 0,~
- Inside source: true
*** True Line Result
      b: b || 0,
** Processing line: ~      a: a || 255~
- Inside source: true
*** True Line Result
      a: 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: ~#+end_src~
- Line was 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 - 14 Triangles Trapezoid - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Advanced Rendering - 14 Triangles Trapezoid - 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/14_triangles_trapezoid/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/07_advanced_rendering/14_triangles_trapezoid/app/main.rb
** 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: 640,~
- Inside source: true
*** True Line Result
      x: 640,
** Processing line: ~      y: 30.from_top,~
- Inside source: true
*** True Line Result
      y: 30.from_top,
** Processing line: ~      text: "Triangle rendering is available in Indie and Pro versions (ignored in Standard Edition).",~
- Inside source: true
*** True Line Result
      text: "Triangle rendering is available in Indie and Pro versions (ignored in Standard Edition).",
** 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: ~    transform_scale = ((args.state.tick_count / 3).sin.abs ** 5).half~
- Inside source: true
*** True Line Result
    transform_scale = ((args.state.tick_count / 3).sin.abs ** 5).half
** Processing line: ~    args.outputs.sprites << [~
- Inside source: true
*** True Line Result
    args.outputs.sprites << [
** Processing line: ~      { x:         600,~
- Inside source: true
*** True Line Result
      { x:         600,
** Processing line: ~        y:         320,~
- Inside source: true
*** True Line Result
        y:         320,
** Processing line: ~        x2:        600,~
- Inside source: true
*** True Line Result
        x2:        600,
** Processing line: ~        y2:        400,~
- Inside source: true
*** True Line Result
        y2:        400,
** Processing line: ~        x3:        640,~
- Inside source: true
*** True Line Result
        x3:        640,
** Processing line: ~        y3:        360,~
- Inside source: true
*** True Line Result
        y3:        360,
** Processing line: ~        path:      "sprites/square/blue.png",~
- Inside source: true
*** True Line Result
        path:      "sprites/square/blue.png",
** 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_x2: 0,~
- Inside source: true
*** True Line Result
        source_x2: 0,
** Processing line: ~        source_y2: 80,~
- Inside source: true
*** True Line Result
        source_y2: 80,
** Processing line: ~        source_x3: 40,~
- Inside source: true
*** True Line Result
        source_x3: 40,
** Processing line: ~        source_y3: 40 },~
- Inside source: true
*** True Line Result
        source_y3: 40 },
** Processing line: ~      { x:         600,~
- Inside source: true
*** True Line Result
      { x:         600,
** Processing line: ~        y:         400,~
- Inside source: true
*** True Line Result
        y:         400,
** Processing line: ~        x2:        680,~
- Inside source: true
*** True Line Result
        x2:        680,
** Processing line: ~        y2:        (400 - 80 * transform_scale).round,~
- Inside source: true
*** True Line Result
        y2:        (400 - 80 * transform_scale).round,
** Processing line: ~        x3:        640,~
- Inside source: true
*** True Line Result
        x3:        640,
** Processing line: ~        y3:        360,~
- Inside source: true
*** True Line Result
        y3:        360,
** Processing line: ~        path:      "sprites/square/blue.png",~
- Inside source: true
*** True Line Result
        path:      "sprites/square/blue.png",
** Processing line: ~        source_x:  0,~
- Inside source: true
*** True Line Result
        source_x:  0,
** Processing line: ~        source_y:  80,~
- Inside source: true
*** True Line Result
        source_y:  80,
** Processing line: ~        source_x2: 80,~
- Inside source: true
*** True Line Result
        source_x2: 80,
** Processing line: ~        source_y2: 80,~
- Inside source: true
*** True Line Result
        source_y2: 80,
** Processing line: ~        source_x3: 40,~
- Inside source: true
*** True Line Result
        source_x3: 40,
** Processing line: ~        source_y3: 40 },~
- Inside source: true
*** True Line Result
        source_y3: 40 },
** Processing line: ~      { x:         640,~
- Inside source: true
*** True Line Result
      { x:         640,
** Processing line: ~        y:         360,~
- Inside source: true
*** True Line Result
        y:         360,
** Processing line: ~        x2:        680,~
- Inside source: true
*** True Line Result
        x2:        680,
** Processing line: ~        y2:        (400 - 80 * transform_scale).round,~
- Inside source: true
*** True Line Result
        y2:        (400 - 80 * transform_scale).round,
** Processing line: ~        x3:        680,~
- Inside source: true
*** True Line Result
        x3:        680,
** Processing line: ~        y3:        (320 + 80 * transform_scale).round,~
- Inside source: true
*** True Line Result
        y3:        (320 + 80 * transform_scale).round,
** Processing line: ~        path:      "sprites/square/blue.png",~
- Inside source: true
*** True Line Result
        path:      "sprites/square/blue.png",
** Processing line: ~        source_x:  40,~
- Inside source: true
*** True Line Result
        source_x:  40,
** Processing line: ~        source_y:  40,~
- Inside source: true
*** True Line Result
        source_y:  40,
** Processing line: ~        source_x2: 80,~
- Inside source: true
*** True Line Result
        source_x2: 80,
** Processing line: ~        source_y2: 80,~
- Inside source: true
*** True Line Result
        source_y2: 80,
** Processing line: ~        source_x3: 80,~
- Inside source: true
*** True Line Result
        source_x3: 80,
** Processing line: ~        source_y3: 0 },~
- Inside source: true
*** True Line Result
        source_y3: 0 },
** Processing line: ~      { x:         600,~
- Inside source: true
*** True Line Result
      { x:         600,
** Processing line: ~        y:         320,~
- Inside source: true
*** True Line Result
        y:         320,
** Processing line: ~        x2:        640,~
- Inside source: true
*** True Line Result
        x2:        640,
** Processing line: ~        y2:        360,~
- Inside source: true
*** True Line Result
        y2:        360,
** Processing line: ~        x3:        680,~
- Inside source: true
*** True Line Result
        x3:        680,
** Processing line: ~        y3:        (320 + 80 * transform_scale).round,~
- Inside source: true
*** True Line Result
        y3:        (320 + 80 * transform_scale).round,
** Processing line: ~        path:      "sprites/square/blue.png",~
- Inside source: true
*** True Line Result
        path:      "sprites/square/blue.png",
** 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_x2: 40,~
- Inside source: true
*** True Line Result
        source_x2: 40,
** Processing line: ~        source_y2: 40,~
- Inside source: true
*** True Line Result
        source_y2: 40,
** Processing line: ~        source_x3: 80,~
- Inside source: true
*** True Line Result
        source_x3: 80,
** Processing line: ~        source_y3: 0 }~
- Inside source: true
*** True Line Result
        source_y3: 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: ~*** 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: ~*** Performance - Collision Limits Many To Many - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Performance - Collision Limits Many To Many - 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/09_collision_limits_many_to_many/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/09_performance/09_collision_limits_many_to_many/app/main.rb
** Processing line: ~  class Square~
- Inside source: true
*** True Line Result
  class Square
** Processing line: ~    attr :x, :y, :w, :h~
- Inside source: true
*** True Line Result
    attr :x, :y, :w, :h
** 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)~
- Inside source: true
*** True Line Result
      @x = (rand @grid.w)
** Processing line: ~      @y = (rand @grid.h)~
- Inside source: true
*** True Line Result
      @y = (rand @grid.h)
** 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: ~      @s    = 1 + (4.randomize :ratio)~
- Inside source: true
*** True Line Result
      @s    = 1 + (4.randomize :ratio)
** 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: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def mark_collisions all~
- Inside source: true
*** True Line Result
    def mark_collisions all
** Processing line: ~      # be sure to do an optimized compilation -O3~
- Inside source: true
*** True Line Result
      # be sure to do an optimized compilation -O3
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # using FFI function~
- Inside source: true
*** True Line Result
      # using FFI function
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if all[self]~
- Inside source: true
*** True Line Result
      if all[self]
** Processing line: ~        @path = 'sprites/square/red.png'~
- Inside source: true
*** True Line Result
        @path = 'sprites/square/red.png'
** Processing line: ~      else~
- Inside source: true
*** True Line Result
      else
** 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 draw_override ffi_draw~
- Inside source: true
*** True Line Result
    def draw_override ffi_draw
** 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: ~    end~
- Inside source: true
*** 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 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: ~      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: Many to Many Collisions"~
- Inside source: true
*** True Line Result
        puts "* INFO: Many to Many Collisions"
** Processing line: ~        puts "* INFO: Please specify the number of sprites to check collisions on."~
- Inside source: true
*** True Line Result
        puts "* INFO: Please specify the number of sprites to check collisions on."
** 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: ~      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| Square.new args.grid }~
- Inside source: true
*** True Line Result
        args.state.stars = args.state.star_count.map { |i| Square.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: ~      state.all_collisions = GTK::Geometry.find_collisions args.state.stars~
- Inside source: true
*** True Line Result
      state.all_collisions = GTK::Geometry.find_collisions args.state.stars
** Processing line: ~      Fn.each_send args.state.stars, self, :mark_collision~
- Inside source: true
*** True Line Result
      Fn.each_send args.state.stars, self, :mark_collision
** 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.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: ~    def mark_collision star~
- Inside source: true
*** True Line Result
    def mark_collision star
** Processing line: ~      star.mark_collisions state.all_collisions~
- Inside source: true
*** True Line Result
      star.mark_collisions state.all_collisions
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** 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: ~  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 and $game.tick~
- Inside source: true
*** True Line Result
    $game.args = args and $game.tick
** Processing line: ~  end~
- Inside source: true
*** True Line Result
  end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~  def reset_with count: count~
- Inside source: true
*** True Line Result
  def reset_with count: count
** Processing line: ~    $game.reset_with count: count~
- Inside source: true
*** True Line Result
    $game.reset_with 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: ~*** 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: ~  <Person id="100">~
- Inside source: true
*** True Line Result
  <Person id="100">
** Processing line: ~    <Name>John Doe</Name>~
- Inside source: true
*** True Line Result
    <Name>John Doe</Name>
** Processing line: ~  </Person>~
- Inside source: true
*** True Line Result
  </Person>
** 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, "<html><head><title>hello</title></head><body><h1>This #{req.method} was request number #{args.state.reqnum}!</h1></body></html>\n", { 'X-DRGTK-header' => 'Powered by DragonRuby!' }~
- Inside source: true
*** True Line Result
        req.respond 200, "<html><head><title>hello</title></head><body><h1>This #{req.method} was request number #{args.state.reqnum}!</h1></body></html>\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: ~*** C Extensions - Handcrafted Extension - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** C Extensions - Handcrafted Extension - 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/04_handcrafted_extension/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/12_c_extensions/04_handcrafted_extension/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: ~  puts Adder.new.add_all(1, 2, 3, [4, 5, 6.0])~
- Inside source: true
*** True Line Result
  puts Adder.new.add_all(1, 2, 3, [4, 5, 6.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: ~  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 - Handcrafted Extension - license.txt~
- Header detected.
*** True Line Result

*** True Line Result
*** C Extensions - Handcrafted Extension - 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/12_c_extensions/04_handcrafted_extension/license.txt~
- Inside source: true
*** True Line Result
  # ./samples/12_c_extensions/04_handcrafted_extension/license.txt
** Processing line: ~  Copyright 2022 DragonRuby LLC~
- Inside source: true
*** True Line Result
  Copyright 2022 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: ~*** 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: ~*** 14 Vr - Skybox - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Skybox - 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/14_vr/01_skybox/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/01_skybox/app/main.rb
** Processing line: ~  require 'app/tick.rb'~
- Inside source: true
*** True Line Result
  require 'app/tick.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.start_server! port: 9001, enable_in_prod: true~
- Inside source: true
*** True Line Result
    args.gtk.start_server! port: 9001, enable_in_prod: true
** Processing line: ~    tick_game args~
- Inside source: true
*** True Line Result
    tick_game 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: ~*** 14 Vr - Skybox - tick.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Skybox - tick.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/14_vr/01_skybox/app/tick.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/01_skybox/app/tick.rb
** Processing line: ~  def skybox args, x, y, z, size~
- Inside source: true
*** True Line Result
  def skybox args, x, y, z, size
** Processing line: ~    sprite = { a: 128, path: 'sprites/box.png' }~
- Inside source: true
*** True Line Result
    sprite = { a: 128, path: 'sprites/box.png' }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    front      = { x: x, y: y, z: z, w: size, h: size, **sprite }~
- Inside source: true
*** True Line Result
    front      = { x: x, y: y, z: z, w: size, h: size, **sprite }
** Processing line: ~    front_720  = { x: x, y: y, z: z, w: size, h: size * 9.fdiv(16), **sprite }~
- Inside source: true
*** True Line Result
    front_720  = { x: x, y: y, z: z, w: size, h: size * 9.fdiv(16), **sprite }
** Processing line: ~    back       = { x: x, y: y, z: z + size, w: size, h: size, **sprite }~
- Inside source: true
*** True Line Result
    back       = { x: x, y: y, z: z + size, w: size, h: size, **sprite }
** Processing line: ~    bottom     = { x: x, y: y - size.half, z: z + size.half, w: size, h: size, angle_x: 90, **sprite }~
- Inside source: true
*** True Line Result
    bottom     = { x: x, y: y - size.half, z: z + size.half, w: size, h: size, angle_x: 90, **sprite }
** Processing line: ~    top        = { x: x, y: y + size.half, z: z + size.half, w: size, h: size, angle_x: 90, **sprite }~
- Inside source: true
*** True Line Result
    top        = { x: x, y: y + size.half, z: z + size.half, w: size, h: size, angle_x: 90, **sprite }
** Processing line: ~    left       = { x: x - size.half, y: y, w: size, h: size, z: z + size.half, angle_y: 90, **sprite }~
- Inside source: true
*** True Line Result
    left       = { x: x - size.half, y: y, w: size, h: size, z: z + size.half, angle_y: 90, **sprite }
** Processing line: ~    right      = { x: x + size.half, y: y, w: size, h: size, z: z + size.half, angle_y: 90, **sprite }~
- Inside source: true
*** True Line Result
    right      = { x: x + size.half, y: y, w: size, h: size, z: z + size.half, angle_y: 90, **sprite }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.sprites << [back,~
- Inside source: true
*** True Line Result
    args.outputs.sprites << [back,
** Processing line: ~                             left,~
- Inside source: true
*** True Line Result
                             left,
** Processing line: ~                             top,~
- Inside source: true
*** True Line Result
                             top,
** Processing line: ~                             bottom,~
- Inside source: true
*** True Line Result
                             bottom,
** Processing line: ~                             right,~
- Inside source: true
*** True Line Result
                             right,
** Processing line: ~                             front,~
- Inside source: true
*** True Line Result
                             front,
** Processing line: ~                             front_720]~
- Inside source: true
*** True Line Result
                             front_720]
** 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: ~    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: ~    args.state.z     ||= 0~
- Inside source: true
*** True Line Result
    args.state.z     ||= 0
** Processing line: ~    args.state.scale ||= 0.05~
- Inside source: true
*** True Line Result
    args.state.scale ||= 0.05
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    if args.inputs.controller_one.key_down.a~
- Inside source: true
*** True Line Result
    if args.inputs.controller_one.key_down.a
** Processing line: ~      if args.grid.name == :bottom_left~
- Inside source: true
*** True Line Result
      if args.grid.name == :bottom_left
** Processing line: ~        args.grid.origin_center!~
- Inside source: true
*** True Line Result
        args.grid.origin_center!
** Processing line: ~      else~
- Inside source: true
*** True Line Result
      else
** Processing line: ~        args.grid.origin_bottom_left!~
- Inside source: true
*** True Line Result
        args.grid.origin_bottom_left!
** Processing line: ~      end~
- Inside source: true
*** 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.scale += args.inputs.controller_one.right_analog_x_perc * 0.01~
- Inside source: true
*** True Line Result
    args.state.scale += args.inputs.controller_one.right_analog_x_perc * 0.01
** Processing line: ~    args.state.z += args.inputs.controller_one.right_analog_y_perc * 1.5~
- Inside source: true
*** True Line Result
    args.state.z += args.inputs.controller_one.right_analog_y_perc * 1.5
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.state.scale = args.state.scale.clamp(0.05, 1.0)~
- Inside source: true
*** True Line Result
    args.state.scale = args.state.scale.clamp(0.05, 1.0)
** Processing line: ~    args.state.z = 0    if args.state.z < 0~
- Inside source: true
*** True Line Result
    args.state.z = 0    if args.state.z < 0
** Processing line: ~    args.state.z = 1280 if args.state.z > 1280~
- Inside source: true
*** True Line Result
    args.state.z = 1280 if args.state.z > 1280
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    skybox args, 0, 0, args.state.z, 1280 * args.state.scale~
- Inside source: true
*** True Line Result
    skybox args, 0, 0, args.state.z, 1280 * args.state.scale
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    render_guides args~
- Inside source: true
*** True Line Result
    render_guides args
** Processing line: ~  end~
- Inside source: true
*** True Line Result
  end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~  def render_guides args~
- Inside source: true
*** True Line Result
  def render_guides args
** Processing line: ~    label_style = { alignment_enum: 1,~
- Inside source: true
*** True Line Result
    label_style = { alignment_enum: 1,
** Processing line: ~                    size_enum: -2,~
- Inside source: true
*** True Line Result
                    size_enum: -2,
** Processing line: ~                    vertical_alignment_enum: 0, r: 255, g: 255, b: 255 }~
- Inside source: true
*** True Line Result
                    vertical_alignment_enum: 0, r: 255, g: 255, b: 255 }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    instructions = [~
- Inside source: true
*** True Line Result
    instructions = [
** Processing line: ~      "scale: #{args.state.scale.to_sf} (right analog left/right)",~
- Inside source: true
*** True Line Result
      "scale: #{args.state.scale.to_sf} (right analog left/right)",
** Processing line: ~      "z: #{args.state.z.to_sf} (right analog up/down)",~
- Inside source: true
*** True Line Result
      "z: #{args.state.z.to_sf} (right analog up/down)",
** Processing line: ~      "origin: :#{args.grid.name} (A button)"~
- Inside source: true
*** True Line Result
      "origin: :#{args.grid.name} (A button)"
** Processing line: ~    ]~
- Inside source: true
*** True Line Result
    ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.labels << instructions.map_with_index do |text, i|~
- Inside source: true
*** True Line Result
    args.outputs.labels << instructions.map_with_index do |text, i|
** Processing line: ~      { x: 640,~
- Inside source: true
*** True Line Result
      { x: 640,
** Processing line: ~        y: 100 + ((instructions.length - (i + 1)) * 22),~
- Inside source: true
*** True Line Result
        y: 100 + ((instructions.length - (i + 1)) * 22),
** Processing line: ~        z: args.state.z,~
- Inside source: true
*** True Line Result
        z: args.state.z,
** Processing line: ~        a: 255,~
- Inside source: true
*** True Line Result
        a: 255,
** Processing line: ~        text: text,~
- Inside source: true
*** True Line Result
        text: text,
** Processing line: ~        ** label_style,~
- Inside source: true
*** True Line Result
        ** label_style,
** Processing line: ~        alignment_enum: 1,~
- Inside source: true
*** True Line Result
        alignment_enum: 1,
** Processing line: ~        vertical_alignment_enum: 0 }~
- Inside source: true
*** True Line Result
        vertical_alignment_enum: 0 }
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # lines for scaled box~
- Inside source: true
*** True Line Result
    # lines for scaled box
** Processing line: ~    size      = 1280 * args.state.scale~
- Inside source: true
*** True Line Result
    size      = 1280 * args.state.scale
** Processing line: ~    size_16_9 = size * 9.fdiv(16)~
- Inside source: true
*** True Line Result
    size_16_9 = size * 9.fdiv(16)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.primitives << [~
- Inside source: true
*** True Line Result
    args.outputs.primitives << [
** Processing line: ~      { x: size - 1280, y: size,        z:            0, w: 1280 * 2, r: 128, g: 128, b: 128, a:  64 }.line!,~
- Inside source: true
*** True Line Result
      { x: size - 1280, y: size,        z:            0, w: 1280 * 2, r: 128, g: 128, b: 128, a:  64 }.line!,
** Processing line: ~      { x: size - 1280, y: size,        z: args.state.z, w: 1280 * 2, r: 128, g: 128, b: 128, a: 255 }.line!,~
- Inside source: true
*** True Line Result
      { x: size - 1280, y: size,        z: args.state.z, w: 1280 * 2, r: 128, g: 128, b: 128, a: 255 }.line!,
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      { x: size - 1280, y: size_16_9,   z:            0, w: 1280 * 2, r: 128, g: 128, b: 128, a:  64 }.line!,~
- Inside source: true
*** True Line Result
      { x: size - 1280, y: size_16_9,   z:            0, w: 1280 * 2, r: 128, g: 128, b: 128, a:  64 }.line!,
** Processing line: ~      { x: size - 1280, y: size_16_9,   z: args.state.z, w: 1280 * 2, r: 128, g: 128, b: 128, a: 255 }.line!,~
- Inside source: true
*** True Line Result
      { x: size - 1280, y: size_16_9,   z: args.state.z, w: 1280 * 2, r: 128, g: 128, b: 128, a: 255 }.line!,
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      { x: size,        y: size - 1280, z:            0, h: 1280 * 2, r: 128, g: 128, b: 128, a:  64 }.line!,~
- Inside source: true
*** True Line Result
      { x: size,        y: size - 1280, z:            0, h: 1280 * 2, r: 128, g: 128, b: 128, a:  64 }.line!,
** Processing line: ~      { x: size,        y: size - 1280, z: args.state.z, h: 1280 * 2, r: 128, g: 128, b: 128, a: 255 }.line!,~
- Inside source: true
*** True Line Result
      { x: size,        y: size - 1280, z: args.state.z, h: 1280 * 2, r: 128, g: 128, b: 128, a: 255 }.line!,
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      { x: size,        y: size,        z: args.state.z, size_enum: -2,~
- Inside source: true
*** True Line Result
      { x: size,        y: size,        z: args.state.z, size_enum: -2,
** Processing line: ~        vertical_alignment_enum: 0,~
- Inside source: true
*** True Line Result
        vertical_alignment_enum: 0,
** Processing line: ~        text: "#{size.to_sf}, #{size.to_sf}, #{args.state.z.to_sf}",~
- Inside source: true
*** True Line Result
        text: "#{size.to_sf}, #{size.to_sf}, #{args.state.z.to_sf}",
** Processing line: ~        r: 255, g: 255, b: 255, a: 255 }.label!,~
- Inside source: true
*** True Line Result
        r: 255, g: 255, b: 255, a: 255 }.label!,
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      { x: size,        y: size_16_9,   z: args.state.z, size_enum: -2,~
- Inside source: true
*** True Line Result
      { x: size,        y: size_16_9,   z: args.state.z, size_enum: -2,
** Processing line: ~        vertical_alignment_enum: 0,~
- Inside source: true
*** True Line Result
        vertical_alignment_enum: 0,
** Processing line: ~        text: "#{size.to_sf}, #{size_16_9.to_sf}, #{args.state.z.to_sf}",~
- Inside source: true
*** True Line Result
        text: "#{size.to_sf}, #{size_16_9.to_sf}, #{args.state.z.to_sf}",
** Processing line: ~        r: 255, g: 255, b: 255, a: 255 }.label!,~
- Inside source: true
*** True Line Result
        r: 255, g: 255, b: 255, a: 255 }.label!,
** Processing line: ~    ]~
- Inside source: true
*** True Line Result
    ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    xs = [~
- Inside source: true
*** True Line Result
    xs = [
** Processing line: ~      { description: "left",   x:    0, alignment_enum: 0 },~
- Inside source: true
*** True Line Result
      { description: "left",   x:    0, alignment_enum: 0 },
** Processing line: ~      { description: "center", x:  640, alignment_enum: 1 },~
- Inside source: true
*** True Line Result
      { description: "center", x:  640, alignment_enum: 1 },
** Processing line: ~      { description: "right",  x: 1280, alignment_enum: 2 },~
- Inside source: true
*** True Line Result
      { description: "right",  x: 1280, alignment_enum: 2 },
** Processing line: ~    ]~
- Inside source: true
*** True Line Result
    ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    ys = [~
- Inside source: true
*** True Line Result
    ys = [
** Processing line: ~      { description: "bottom",        y:    0, vertical_alignment_enum: 0 },~
- Inside source: true
*** True Line Result
      { description: "bottom",        y:    0, vertical_alignment_enum: 0 },
** Processing line: ~      { description: "center",        y:  640, vertical_alignment_enum: 1 },~
- Inside source: true
*** True Line Result
      { description: "center",        y:  640, vertical_alignment_enum: 1 },
** Processing line: ~      { description: "center (720p)", y:  360, vertical_alignment_enum: 1 },~
- Inside source: true
*** True Line Result
      { description: "center (720p)", y:  360, vertical_alignment_enum: 1 },
** Processing line: ~      { description: "top",           y: 1280, vertical_alignment_enum: 2 },~
- Inside source: true
*** True Line Result
      { description: "top",           y: 1280, vertical_alignment_enum: 2 },
** Processing line: ~      { description: "top (720p)",    y:  720, vertical_alignment_enum: 2 },~
- Inside source: true
*** True Line Result
      { description: "top (720p)",    y:  720, vertical_alignment_enum: 2 },
** Processing line: ~    ]~
- Inside source: true
*** True Line Result
    ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.primitives << xs.product(ys).map do |(xdef, ydef)|~
- Inside source: true
*** True Line Result
    args.outputs.primitives << xs.product(ys).map do |(xdef, ydef)|
** Processing line: ~      [~
- Inside source: true
*** True Line Result
      [
** Processing line: ~        { x: xdef.x,~
- Inside source: true
*** True Line Result
        { x: xdef.x,
** Processing line: ~          y: ydef.y,~
- Inside source: true
*** True Line Result
          y: ydef.y,
** Processing line: ~          z: args.state.z,~
- Inside source: true
*** True Line Result
          z: args.state.z,
** Processing line: ~          text: "#{xdef.x.to_sf}, #{ydef.y.to_sf} #{args.state.z}",~
- Inside source: true
*** True Line Result
          text: "#{xdef.x.to_sf}, #{ydef.y.to_sf} #{args.state.z}",
** Processing line: ~          **label_style,~
- Inside source: true
*** True Line Result
          **label_style,
** Processing line: ~          alignment_enum: xdef.alignment_enum,~
- Inside source: true
*** True Line Result
          alignment_enum: xdef.alignment_enum,
** Processing line: ~          vertical_alignment_enum: ydef.vertical_alignment_enum~
- Inside source: true
*** True Line Result
          vertical_alignment_enum: ydef.vertical_alignment_enum
** Processing line: ~        },~
- Inside source: true
*** True Line Result
        },
** Processing line: ~        { x: xdef.x,~
- Inside source: true
*** True Line Result
        { x: xdef.x,
** Processing line: ~          y: ydef.y - 20,~
- Inside source: true
*** True Line Result
          y: ydef.y - 20,
** Processing line: ~          z: args.state.z,~
- Inside source: true
*** True Line Result
          z: args.state.z,
** Processing line: ~          text: "#{ydef.description}, #{xdef.description}",~
- Inside source: true
*** True Line Result
          text: "#{ydef.description}, #{xdef.description}",
** Processing line: ~          **label_style,~
- Inside source: true
*** True Line Result
          **label_style,
** Processing line: ~          alignment_enum: xdef.alignment_enum,~
- Inside source: true
*** True Line Result
          alignment_enum: xdef.alignment_enum,
** Processing line: ~          vertical_alignment_enum: ydef.vertical_alignment_enum~
- Inside source: true
*** True Line Result
          vertical_alignment_enum: ydef.vertical_alignment_enum
** 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: ~    args.outputs.primitives << xs.product(ys).map do |(xdef, ydef)|~
- Inside source: true
*** True Line Result
    args.outputs.primitives << xs.product(ys).map do |(xdef, ydef)|
** Processing line: ~      [~
- Inside source: true
*** True Line Result
      [
** Processing line: ~        {~
- Inside source: true
*** True Line Result
        {
** Processing line: ~          x: xdef.x - 1280,~
- Inside source: true
*** True Line Result
          x: xdef.x - 1280,
** Processing line: ~          y: ydef.y,~
- Inside source: true
*** True Line Result
          y: ydef.y,
** Processing line: ~          w: 1280 * 2,~
- Inside source: true
*** True Line Result
          w: 1280 * 2,
** Processing line: ~          a: 64,~
- Inside source: true
*** True Line Result
          a: 64,
** Processing line: ~          r: 128, g: 128, b: 128~
- Inside source: true
*** True Line Result
          r: 128, g: 128, b: 128
** Processing line: ~        }.line!,~
- Inside source: true
*** True Line Result
        }.line!,
** Processing line: ~        {~
- Inside source: true
*** True Line Result
        {
** Processing line: ~          x: xdef.x,~
- Inside source: true
*** True Line Result
          x: xdef.x,
** Processing line: ~          y: ydef.y - 720,~
- Inside source: true
*** True Line Result
          y: ydef.y - 720,
** Processing line: ~          h: 720 * 2,~
- Inside source: true
*** True Line Result
          h: 720 * 2,
** Processing line: ~          a: 64,~
- Inside source: true
*** True Line Result
          a: 64,
** Processing line: ~          r: 128, g: 128, b: 128~
- Inside source: true
*** True Line Result
          r: 128, g: 128, b: 128
** Processing line: ~        }.line!,~
- Inside source: true
*** True Line Result
        }.line!,
** Processing line: ~      ].map do |p|~
- Inside source: true
*** True Line Result
      ].map do |p|
** Processing line: ~        [~
- Inside source: true
*** True Line Result
        [
** Processing line: ~          p.merge(z:            0, a:  64),~
- Inside source: true
*** True Line Result
          p.merge(z:            0, a:  64),
** Processing line: ~          p.merge(z: args.state.z, a: 255)~
- Inside source: true
*** True Line Result
          p.merge(z: args.state.z, a: 255)
** 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: ~*** 14 Vr - Top Down Rpg - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Top Down Rpg - 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/14_vr/02_top_down_rpg/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/02_top_down_rpg/app/main.rb
** Processing line: ~  require 'app/tick.rb'~
- Inside source: true
*** True Line Result
  require 'app/tick.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.start_server! port: 9001, enable_in_prod: true~
- Inside source: true
*** True Line Result
    args.gtk.start_server! port: 9001, enable_in_prod: true
** Processing line: ~    tick_game args~
- Inside source: true
*** True Line Result
    tick_game 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: ~*** 14 Vr - Top Down Rpg - tick.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Top Down Rpg - tick.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/14_vr/02_top_down_rpg/app/tick.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/02_top_down_rpg/app/tick.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: ~      outputs.background_color = [0, 0, 0]~
- Inside source: true
*** True Line Result
      outputs.background_color = [0, 0, 0]
** 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.goal~
- Inside source: true
*** True Line Result
      args.outputs.solids << args.state.goal
** 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: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      args.outputs.solids << args.state.walls.map { |s| s.to_hash.merge(z: 2, g: 80) }~
- Inside source: true
*** True Line Result
      args.outputs.solids << args.state.walls.map { |s| s.to_hash.merge(z: 2, g: 80) }
** Processing line: ~      args.outputs.solids << args.state.walls.map { |s| s.to_hash.merge(z: 6, g: 255, a: 128) }~
- Inside source: true
*** True Line Result
      args.outputs.solids << args.state.walls.map { |s| s.to_hash.merge(z: 6, g: 255, a: 128) }
** 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 << { x: 640,~
- Inside source: true
*** True Line Result
        args.outputs.labels << { x: 640,
** Processing line: ~                                 y: 360,~
- Inside source: true
*** True Line Result
                                 y: 360,
** Processing line: ~                                 z: 10,~
- Inside source: true
*** True Line Result
                                 z: 10,
** Processing line: ~                                 text: "YOU'RE A GOD DAMN WIZARD, HARRY.",~
- Inside source: true
*** True Line Result
                                 text: "YOU'RE A GOD DAMN WIZARD, HARRY.",
** Processing line: ~                                 size_enum: 10,~
- Inside source: true
*** True Line Result
                                 size_enum: 10,
** 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,~
- 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: ~      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  || args.inputs.controller_one.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  || args.inputs.controller_one.left # x position decreases by 1 if left key is pressed
** Processing line: ~      move_player args,  1,  0 if args.inputs.keyboard.right || args.inputs.controller_one.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 || args.inputs.controller_one.right # x position increases by 1 if right key is pressed
** Processing line: ~      move_player args,  0,  1 if args.inputs.keyboard.up    || args.inputs.controller_one.down # 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    || args.inputs.controller_one.down # y position increases by 1 if up is pressed
** Processing line: ~      move_player args,  0, -1 if args.inputs.keyboard.down  || args.inputs.controller_one.up # 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  || args.inputs.controller_one.up # 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, 180,  0, 0) # black tile~
- Inside source: true
*** True Line Result
          args.state.goal   = tile(args, x, y, 180,  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: ~  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_game args~
- Inside source: true
*** True Line Result
  def tick_game 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: ~*** 14 Vr - Space Invaders - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Space Invaders - 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/14_vr/03_space_invaders/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/03_space_invaders/app/main.rb
** Processing line: ~  require 'app/tick.rb'~
- Inside source: true
*** True Line Result
  require 'app/tick.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.start_server! port: 9001, enable_in_prod: true~
- Inside source: true
*** True Line Result
    args.gtk.start_server! port: 9001, enable_in_prod: true
** Processing line: ~    tick_game args~
- Inside source: true
*** True Line Result
    tick_game 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: ~*** 14 Vr - Space Invaders - tick.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Space Invaders - tick.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/14_vr/03_space_invaders/app/tick.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/03_space_invaders/app/tick.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: ~      grid.origin_center!~
- Inside source: true
*** True Line Result
      grid.origin_center!
** Processing line: ~      defaults~
- Inside source: true
*** True Line Result
      defaults
** Processing line: ~      outputs.background_color = [0, 0, 0]~
- Inside source: true
*** True Line Result
      outputs.background_color = [0, 0, 0]
** Processing line: ~      args.outputs.sprites << state.enemies.map { |e| enemy_prefab e }~
- Inside source: true
*** True Line Result
      args.outputs.sprites << state.enemies.map { |e| enemy_prefab e }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if gtk.platform? :macos~
- Inside source: true
*** True Line Result
      if gtk.platform? :macos
** Processing line: ~        args.outputs.borders << hmap(x: -150,~
- Inside source: true
*** True Line Result
        args.outputs.borders << hmap(x: -150,
** Processing line: ~                                     y: -220,~
- Inside source: true
*** True Line Result
                                     y: -220,
** Processing line: ~                                     w: 300, h: 130, r: 255, g: 255, b: 255)~
- Inside source: true
*** True Line Result
                                     w: 300, h: 130, 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 defaults~
- Inside source: true
*** True Line Result
    def defaults
** Processing line: ~      state.enemy_sprite_size = 64~
- Inside source: true
*** True Line Result
      state.enemy_sprite_size = 64
** Processing line: ~      state.row_size = 16~
- Inside source: true
*** True Line Result
      state.row_size = 16
** Processing line: ~      state.max_rows = 20~
- Inside source: true
*** True Line Result
      state.max_rows = 20
** Processing line: ~      state.enemies ||= 160.map_with_index do |i|~
- Inside source: true
*** True Line Result
      state.enemies ||= 160.map_with_index do |i|
** Processing line: ~        x = i % 16~
- Inside source: true
*** True Line Result
        x = i % 16
** Processing line: ~        y = i.idiv 16~
- Inside source: true
*** True Line Result
        y = i.idiv 16
** Processing line: ~        hmap row: y, col: x~
- Inside source: true
*** True Line Result
        hmap row: y, col: 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: ~    def enemy_prefab enemy~
- Inside source: true
*** True Line Result
    def enemy_prefab enemy
** Processing line: ~      if enemy.row > state.max_rows~
- Inside source: true
*** True Line Result
      if enemy.row > state.max_rows
** Processing line: ~        raise "#{enemy}"~
- Inside source: true
*** True Line Result
        raise "#{enemy}"
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~      relative_row = enemy.row + 1~
- Inside source: true
*** True Line Result
      relative_row = enemy.row + 1
** Processing line: ~      z = 50 - relative_row * 10~
- Inside source: true
*** True Line Result
      z = 50 - relative_row * 10
** Processing line: ~      x = (enemy.col * state.enemy_sprite_size) - (state.enemy_sprite_size * state.row_size).idiv(2)~
- Inside source: true
*** True Line Result
      x = (enemy.col * state.enemy_sprite_size) - (state.enemy_sprite_size * state.row_size).idiv(2)
** Processing line: ~      enemy_sprite(x, enemy.row * 10, z, enemy)~
- Inside source: true
*** True Line Result
      enemy_sprite(x, enemy.row * 10, z, enemy)
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def enemy_sprite x, y, z, meta~
- Inside source: true
*** True Line Result
    def enemy_sprite x, y, z, meta
** Processing line: ~      index = 0.frame_index count: 2, hold_for: 50, repeat: true~
- Inside source: true
*** True Line Result
      index = 0.frame_index count: 2, hold_for: 50, repeat: true
** Processing line: ~      pmap(x: x, y: y, z: z, w: state.enemy_sprite_size, h: state.enemy_sprite_size, path: 'sprites/enemy.png', source_x: 128 * index, source_y: 0, source_w: 128, source_h: 128, meta: meta)~
- Inside source: true
*** True Line Result
      pmap(x: x, y: y, z: z, w: state.enemy_sprite_size, h: state.enemy_sprite_size, path: 'sprites/enemy.png', source_x: 128 * index, source_y: 0, source_w: 128, source_h: 128, meta: meta)
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def pmap opts~
- Inside source: true
*** True Line Result
    def pmap opts
** Processing line: ~      if gtk.platform? :macos~
- Inside source: true
*** True Line Result
      if gtk.platform? :macos
** Processing line: ~        if opts.z >= 60~
- Inside source: true
*** True Line Result
        if opts.z >= 60
** Processing line: ~          return nil~
- Inside source: true
*** True Line Result
          return nil
** Processing line: ~        elsif (opts.z * 8) > 1000~
- Inside source: true
*** True Line Result
        elsif (opts.z * 8) > 1000
** Processing line: ~          return nil~
- Inside source: true
*** True Line Result
          return nil
** Processing line: ~        elsif opts.z <= 60~
- Inside source: true
*** True Line Result
        elsif opts.z <= 60
** Processing line: ~          scale = (1000 - opts.z * 8).fdiv(1000)~
- Inside source: true
*** True Line Result
          scale = (1000 - opts.z * 8).fdiv(1000)
** Processing line: ~          hscale = 0.5 * scale ** 6~
- Inside source: true
*** True Line Result
          hscale = 0.5 * scale ** 6
** Processing line: ~          vscale = scale~
- Inside source: true
*** True Line Result
          vscale = scale
** Processing line: ~          w = (state.enemy_sprite_size * 0.5) * hscale~
- Inside source: true
*** True Line Result
          w = (state.enemy_sprite_size * 0.5) * hscale
** Processing line: ~          h = (state.enemy_sprite_size * 0.5) * hscale~
- Inside source: true
*** True Line Result
          h = (state.enemy_sprite_size * 0.5) * hscale
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~          transform_x = opts.x * 0.5~
- Inside source: true
*** True Line Result
          transform_x = opts.x * 0.5
** Processing line: ~          x = transform_x * hscale~
- Inside source: true
*** True Line Result
          x = transform_x * hscale
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~          y_magnitude = 0.45~
- Inside source: true
*** True Line Result
          y_magnitude = 0.45
** Processing line: ~          transform_y = opts.y * y_magnitude~
- Inside source: true
*** True Line Result
          transform_y = opts.y * y_magnitude
** Processing line: ~          y = (-transform_y * vscale ** 5.5) + 50 * y_magnitude~
- Inside source: true
*** True Line Result
          y = (-transform_y * vscale ** 5.5) + 50 * y_magnitude
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~          return opts.merge! x: x, y: y, w: w, h: h~
- Inside source: true
*** True Line Result
          return opts.merge! x: x, y: y, w: w, h: h
** Processing line: ~        else~
- Inside source: true
*** True Line Result
        else
** Processing line: ~          raise "#{opts}"~
- Inside source: true
*** True Line Result
          raise "#{opts}"
** Processing line: ~          return nil~
- Inside source: true
*** True Line Result
          return nil
** Processing line: ~        end~
- Inside source: true
*** True Line Result
        end
** Processing line: ~      else~
- Inside source: true
*** True Line Result
      else
** Processing line: ~        return opts.merge! y: opts.y - 55~
- Inside source: true
*** True Line Result
        return opts.merge! y: opts.y - 55
** 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 = Game.new~
- Inside source: true
*** True Line Result
  $game = Game.new
** 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: ~    $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: ~*** 14 Vr - Let There Be Light - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Let There Be Light - 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/14_vr/04_let_there_be_light/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/04_let_there_be_light/app/main.rb
** Processing line: ~  require 'app/tick.rb'~
- Inside source: true
*** True Line Result
  require 'app/tick.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.start_server! port: 9001, enable_in_prod: true~
- Inside source: true
*** True Line Result
    args.gtk.start_server! port: 9001, enable_in_prod: true
** Processing line: ~    tick_game args~
- Inside source: true
*** True Line Result
    tick_game 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: ~*** 14 Vr - Let There Be Light - tick.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Let There Be Light - tick.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/14_vr/04_let_there_be_light/app/tick.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/04_let_there_be_light/app/tick.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: ~      grid.origin_center!~
- Inside source: true
*** True Line Result
      grid.origin_center!
** Processing line: ~      defaults~
- Inside source: true
*** True Line Result
      defaults
** Processing line: ~      state.angle_shift_x ||= 180~
- Inside source: true
*** True Line Result
      state.angle_shift_x ||= 180
** Processing line: ~      state.angle_shift_y ||= 180~
- Inside source: true
*** True Line Result
      state.angle_shift_y ||= 180
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if inputs.controller_one.right_analog_y_perc.round(2) != 0.00~
- Inside source: true
*** True Line Result
      if inputs.controller_one.right_analog_y_perc.round(2) != 0.00
** Processing line: ~        args.state.star_distance += (inputs.controller_one.right_analog_y_perc * 0.25) ** 2 * inputs.controller_one.right_analog_y_perc.sign~
- Inside source: true
*** True Line Result
        args.state.star_distance += (inputs.controller_one.right_analog_y_perc * 0.25) ** 2 * inputs.controller_one.right_analog_y_perc.sign
** Processing line: ~        state.star_distance = state.star_distance.clamp(state.min_star_distance, state.max_star_distance)~
- Inside source: true
*** True Line Result
        state.star_distance = state.star_distance.clamp(state.min_star_distance, state.max_star_distance)
** Processing line: ~        state.star_sprites = calc_star_primitives~
- Inside source: true
*** True Line Result
        state.star_sprites = calc_star_primitives
** 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: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_star_primitives~
- Inside source: true
*** True Line Result
    def calc_star_primitives
** Processing line: ~      args.state.stars.map do |s|~
- Inside source: true
*** True Line Result
      args.state.stars.map do |s|
** Processing line: ~        w = (32 * state.star_distance).clamp(1, 32)~
- Inside source: true
*** True Line Result
        w = (32 * state.star_distance).clamp(1, 32)
** Processing line: ~        h = (32 * state.star_distance).clamp(1, 32)~
- Inside source: true
*** True Line Result
        h = (32 * state.star_distance).clamp(1, 32)
** Processing line: ~        x = (state.max.x * state.star_distance) * s.xr~
- Inside source: true
*** True Line Result
        x = (state.max.x * state.star_distance) * s.xr
** Processing line: ~        y = (state.max.y * state.star_distance) * s.yr~
- Inside source: true
*** True Line Result
        y = (state.max.y * state.star_distance) * s.yr
** Processing line: ~        z = state.center.z + (state.max.z * state.star_distance * 10 * s.zr)~
- Inside source: true
*** True Line Result
        z = state.center.z + (state.max.z * state.star_distance * 10 * s.zr)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        angle_x = Math.atan2(z - 600, y).to_degrees + 90~
- Inside source: true
*** True Line Result
        angle_x = Math.atan2(z - 600, y).to_degrees + 90
** Processing line: ~        angle_y = Math.atan2(z - 600, x).to_degrees + 90~
- Inside source: true
*** True Line Result
        angle_y = Math.atan2(z - 600, x).to_degrees + 90
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        draw_x = x - w.half~
- Inside source: true
*** True Line Result
        draw_x = x - w.half
** Processing line: ~        draw_y = y - 40 - h.half~
- Inside source: true
*** True Line Result
        draw_y = y - 40 - h.half
** Processing line: ~        draw_z = z~
- Inside source: true
*** True Line Result
        draw_z = z
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        { x: draw_x,~
- Inside source: true
*** True Line Result
        { x: draw_x,
** Processing line: ~          y: draw_y,~
- Inside source: true
*** True Line Result
          y: draw_y,
** Processing line: ~          z: draw_z,~
- Inside source: true
*** True Line Result
          z: draw_z,
** Processing line: ~          b: 255,~
- Inside source: true
*** True Line Result
          b: 255,
** 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: ~          angle_x: angle_x,~
- Inside source: true
*** True Line Result
          angle_x: angle_x,
** Processing line: ~          angle_y: angle_y,~
- Inside source: true
*** True Line Result
          angle_y: angle_y,
** Processing line: ~          path: 'sprites/star.png' }~
- Inside source: true
*** True Line Result
          path: 'sprites/star.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~
- Inside source: true
*** True Line Result
    def render
** Processing line: ~      outputs.background_color = [0, 0, 0]~
- Inside source: true
*** True Line Result
      outputs.background_color = [0, 0, 0]
** Processing line: ~      if gtk.platform? :macos~
- Inside source: true
*** True Line Result
      if gtk.platform? :macos
** Processing line: ~        args.outputs.borders << hmap(x: -150,~
- Inside source: true
*** True Line Result
        args.outputs.borders << hmap(x: -150,
** Processing line: ~                                     y: -220,~
- Inside source: true
*** True Line Result
                                     y: -220,
** Processing line: ~                                     w: 300, h: 130, r: 255, g: 255, b: 255)~
- Inside source: true
*** True Line Result
                                     w: 300, h: 130, 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: ~      if state.star_distance <= 1.0~
- Inside source: true
*** True Line Result
      if state.star_distance <= 1.0
** Processing line: ~        text_alpha = (1 - state.star_distance) * 255~
- Inside source: true
*** True Line Result
        text_alpha = (1 - state.star_distance) * 255
** Processing line: ~        args.outputs.labels << { x: 0, y: 50, text: "Let there be light.", r: 255, g: 255, b: 255, size_enum: 1, alignment_enum: 1, a: text_alpha }~
- Inside source: true
*** True Line Result
        args.outputs.labels << { x: 0, y: 50, text: "Let there be light.", r: 255, g: 255, b: 255, size_enum: 1, alignment_enum: 1, a: text_alpha }
** Processing line: ~        args.outputs.labels << { x: 0, y: 25, text: "(right analog: up/down)", r: 255, g: 255, b: 255, size_enum: -2, alignment_enum: 1, a: text_alpha }~
- Inside source: true
*** True Line Result
        args.outputs.labels << { x: 0, y: 25, text: "(right analog: up/down)", r: 255, g: 255, b: 255, size_enum: -2, alignment_enum: 1, a: text_alpha }
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      args.outputs.sprites << state.star_sprites~
- Inside source: true
*** True Line Result
      args.outputs.sprites << state.star_sprites
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def random_point~
- Inside source: true
*** True Line Result
    def random_point
** Processing line: ~      r = { xr: 2.randomize(:ratio) - 1,~
- Inside source: true
*** True Line Result
      r = { xr: 2.randomize(:ratio) - 1,
** Processing line: ~            yr: 2.randomize(:ratio) - 1,~
- Inside source: true
*** True Line Result
            yr: 2.randomize(:ratio) - 1,
** Processing line: ~            zr: 2.randomize(:ratio) - 1 }~
- Inside source: true
*** True Line Result
            zr: 2.randomize(:ratio) - 1 }
** Processing line: ~      if (r.xr ** 2 + r.yr ** 2 + r.zr ** 2) > 1.0~
- Inside source: true
*** True Line Result
      if (r.xr ** 2 + r.yr ** 2 + r.zr ** 2) > 1.0
** Processing line: ~        return random_point~
- Inside source: true
*** True Line Result
        return random_point
** Processing line: ~      else~
- Inside source: true
*** True Line Result
      else
** Processing line: ~        return r~
- Inside source: true
*** True Line Result
        return r
** Processing line: ~      end~
- Inside source: true
*** True 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.max_star_distance ||= 100~
- Inside source: true
*** True Line Result
      state.max_star_distance ||= 100
** Processing line: ~      state.min_star_distance ||= 0.001~
- Inside source: true
*** True Line Result
      state.min_star_distance ||= 0.001
** Processing line: ~      state.star_distance     ||= 0.001~
- Inside source: true
*** True Line Result
      state.star_distance     ||= 0.001
** Processing line: ~      state.star_angle        ||= 0~
- Inside source: true
*** True Line Result
      state.star_angle        ||= 0
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.center.x       ||= 0~
- Inside source: true
*** True Line Result
      state.center.x       ||= 0
** Processing line: ~      state.center.y       ||= 0~
- Inside source: true
*** True Line Result
      state.center.y       ||= 0
** Processing line: ~      state.center.z       ||= 30~
- Inside source: true
*** True Line Result
      state.center.z       ||= 30
** Processing line: ~      state.max.x          ||= 640~
- Inside source: true
*** True Line Result
      state.max.x          ||= 640
** Processing line: ~      state.max.y          ||= 640~
- Inside source: true
*** True Line Result
      state.max.y          ||= 640
** Processing line: ~      state.max.z          ||= 50~
- Inside source: true
*** True Line Result
      state.max.z          ||= 50
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.stars ||= 500.map do~
- Inside source: true
*** True Line Result
      state.stars ||= 500.map do
** Processing line: ~        random_point~
- Inside source: true
*** True Line Result
        random_point
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.star_sprites ||= calc_star_primitives~
- Inside source: true
*** True Line Result
      state.star_sprites ||= calc_star_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: ~  $game = Game.new~
- Inside source: true
*** True Line Result
  $game = Game.new
** 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: ~    $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: ~*** 14 Vr - Draw A Cube - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Draw A 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/14_vr/05_draw_a_cube/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/05_draw_a_cube/app/main.rb
** Processing line: ~  require 'app/tick.rb'~
- Inside source: true
*** True Line Result
  require 'app/tick.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.start_server! port: 9001, enable_in_prod: true~
- Inside source: true
*** True Line Result
    args.gtk.start_server! port: 9001, enable_in_prod: true
** Processing line: ~    tick_game args~
- Inside source: true
*** True Line Result
    tick_game 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: ~*** 14 Vr - Draw A Cube - tick.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Draw A Cube - tick.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/14_vr/05_draw_a_cube/app/tick.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/05_draw_a_cube/app/tick.rb
** Processing line: ~  def cube args, x, y, z, size~
- Inside source: true
*** True Line Result
  def cube args, x, y, z, size
** Processing line: ~    sprite = { w: size, h: size, path: 'sprites/square/blue.png' }~
- Inside source: true
*** True Line Result
    sprite = { w: size, h: size, path: 'sprites/square/blue.png' }
** Processing line: ~    back   = { x: x,                 y: y,                 z: z - size.half + 1,              **sprite }~
- Inside source: true
*** True Line Result
    back   = { x: x,                 y: y,                 z: z - size.half + 1,              **sprite }
** Processing line: ~    front  = { x: x,                 y: y,                 z: z + size.half - 1,              **sprite }~
- Inside source: true
*** True Line Result
    front  = { x: x,                 y: y,                 z: z + size.half - 1,              **sprite }
** Processing line: ~    top    = { x: x,                 y: y + size.half - 1, z: z,                 angle_x: 90, **sprite }~
- Inside source: true
*** True Line Result
    top    = { x: x,                 y: y + size.half - 1, z: z,                 angle_x: 90, **sprite }
** Processing line: ~    bottom = { x: x,                 y: y - size.half + 1, z: z,                 angle_x: 90, **sprite }~
- Inside source: true
*** True Line Result
    bottom = { x: x,                 y: y - size.half + 1, z: z,                 angle_x: 90, **sprite }
** Processing line: ~    left   = { x: x - size.half + 1, y: y,                 z: z,                 angle_y: 90, **sprite }~
- Inside source: true
*** True Line Result
    left   = { x: x - size.half + 1, y: y,                 z: z,                 angle_y: 90, **sprite }
** Processing line: ~    right  = { x: x + size.half - 1, y: y,                 z: z,                 angle_y: 90, **sprite }~
- Inside source: true
*** True Line Result
    right  = { x: x + size.half - 1, y: y,                 z: z,                 angle_y: 90, **sprite }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # assumes cube is always in front of player~
- Inside source: true
*** True Line Result
    # assumes cube is always in front of player
** Processing line: ~    # looking at cube straight on~
- Inside source: true
*** True Line Result
    # looking at cube straight on
** Processing line: ~    #    0         0~
- Inside source: true
*** True Line Result
    #    0         0
** Processing line: ~    if y == 0 && x == 0~
- Inside source: true
*** True Line Result
    if y == 0 && x == 0
** Processing line: ~      args.outputs.sprites << [back, left, top, bottom, right, front]~
- Inside source: true
*** True Line Result
      args.outputs.sprites << [back, left, top, bottom, right, front]
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # looking at right side of cube, head on~
- Inside source: true
*** True Line Result
    # looking at right side of cube, head on
** Processing line: ~    #    -         0~
- Inside source: true
*** True Line Result
    #    -         0
** Processing line: ~    if x < 0 && y == 0~
- Inside source: true
*** True Line Result
    if x < 0 && y == 0
** Processing line: ~      args.outputs.sprites << [back, left, top, bottom, right, front]~
- Inside source: true
*** True Line Result
      args.outputs.sprites << [back, left, top, bottom, right, front]
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # looking at left side of the cube, head on~
- Inside source: true
*** True Line Result
    # looking at left side of the cube, head on
** Processing line: ~    #    +         0~
- Inside source: true
*** True Line Result
    #    +         0
** Processing line: ~    if x > 0 && y == 0~
- Inside source: true
*** True Line Result
    if x > 0 && y == 0
** Processing line: ~      args.outputs.sprites << [back, right, top, bottom, left, front]~
- Inside source: true
*** True Line Result
      args.outputs.sprites << [back, right, top, bottom, left, front]
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # looking at top of the cube, head on~
- Inside source: true
*** True Line Result
    # looking at top of the cube, head on
** Processing line: ~    #    0         -~
- Inside source: true
*** True Line Result
    #    0         -
** Processing line: ~    if x == 0 && y < 0~
- Inside source: true
*** True Line Result
    if x == 0 && y < 0
** Processing line: ~      args.outputs.sprites << [back, left, bottom, right, front, top]~
- Inside source: true
*** True Line Result
      args.outputs.sprites << [back, left, bottom, right, front, top]
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # looking at bottom of the cube, head on~
- Inside source: true
*** True Line Result
    # looking at bottom of the cube, head on
** Processing line: ~    #    0         +~
- Inside source: true
*** True Line Result
    #    0         +
** Processing line: ~    if x == 0 && y > 0~
- Inside source: true
*** True Line Result
    if x == 0 && y > 0
** Processing line: ~      args.outputs.sprites << [back, left, top, right, front, bottom]~
- Inside source: true
*** True Line Result
      args.outputs.sprites << [back, left, top, right, front, bottom]
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # looking at right, and top of cube~
- Inside source: true
*** True Line Result
    # looking at right, and top of cube
** Processing line: ~    #    -        -~
- Inside source: true
*** True Line Result
    #    -        -
** Processing line: ~    if x < 0 && y < 0~
- Inside source: true
*** True Line Result
    if x < 0 && y < 0
** Processing line: ~      args.outputs.sprites << [back, left, bottom, right, top, front]~
- Inside source: true
*** True Line Result
      args.outputs.sprites << [back, left, bottom, right, top, front]
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # looking at right, and bottom of cube~
- Inside source: true
*** True Line Result
    # looking at right, and bottom of cube
** Processing line: ~    #    -        +~
- Inside source: true
*** True Line Result
    #    -        +
** Processing line: ~    if x < 0 && y > 0~
- Inside source: true
*** True Line Result
    if x < 0 && y > 0
** Processing line: ~      args.outputs.sprites << [back, left, bottom, top, right, front]~
- Inside source: true
*** True Line Result
      args.outputs.sprites << [back, left, bottom, top, right, front]
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # looking at left, and top of cube~
- Inside source: true
*** True Line Result
    # looking at left, and top of cube
** Processing line: ~    #    +        -~
- Inside source: true
*** True Line Result
    #    +        -
** Processing line: ~    if x > 0 && y < 0~
- Inside source: true
*** True Line Result
    if x > 0 && y < 0
** Processing line: ~      args.outputs.sprites << [back, right, bottom, left, top, front]~
- Inside source: true
*** True Line Result
      args.outputs.sprites << [back, right, bottom, left, top, front]
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    # looking at left, and bottom of cube~
- Inside source: true
*** True Line Result
    # looking at left, and bottom of cube
** Processing line: ~    #    +        +~
- Inside source: true
*** True Line Result
    #    +        +
** Processing line: ~    if x > 0 && y > 0~
- Inside source: true
*** True Line Result
    if x > 0 && y > 0
** Processing line: ~      args.outputs.sprites << [back, right, top, left, bottom, front]~
- Inside source: true
*** True Line Result
      args.outputs.sprites << [back, right, top, left, bottom, front]
** Processing line: ~    end~
- Inside source: true
*** True 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_game args~
- Inside source: true
*** True Line Result
  def tick_game args
** Processing line: ~    args.grid.origin_center!~
- Inside source: true
*** True Line Result
    args.grid.origin_center!
** 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: ~    args.state.x ||= 0~
- Inside source: true
*** True Line Result
    args.state.x ||= 0
** Processing line: ~    args.state.y ||= 0~
- Inside source: true
*** True Line Result
    args.state.y ||= 0
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.state.x += 10 * args.inputs.controller_one.right_analog_x_perc~
- Inside source: true
*** True Line Result
    args.state.x += 10 * args.inputs.controller_one.right_analog_x_perc
** Processing line: ~    args.state.y += 10 * args.inputs.controller_one.right_analog_y_perc * -1~
- Inside source: true
*** True Line Result
    args.state.y += 10 * args.inputs.controller_one.right_analog_y_perc * -1
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    cube args, args.state.x, args.state.y, 0, 100~
- Inside source: true
*** True Line Result
    cube args, args.state.x, args.state.y, 0, 100
** 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: ~*** 14 Vr - Citadels - tick.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Citadels - tick.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/14_vr/06_citadels/app/tick.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/06_citadels/app/tick.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 citadel x, y, z~
- Inside source: true
*** True Line Result
    def citadel x, y, z
** Processing line: ~      angle = state.tick_count.idiv(10) % 360~
- Inside source: true
*** True Line Result
      angle = state.tick_count.idiv(10) % 360
** Processing line: ~      adjacent = 40~
- Inside source: true
*** True Line Result
      adjacent = 40
** Processing line: ~      adjacent = adjacent.ceil~
- Inside source: true
*** True Line Result
      adjacent = adjacent.ceil
** Processing line: ~      angle = Math.atan2(40, 70).to_degrees~
- Inside source: true
*** True Line Result
      angle = Math.atan2(40, 70).to_degrees
** Processing line: ~      y += 500~
- Inside source: true
*** True Line Result
      y += 500
** Processing line: ~      x -= 40~
- Inside source: true
*** True Line Result
      x -= 40
** Processing line: ~      back_sprites = [~
- Inside source: true
*** True Line Result
      back_sprites = [
** Processing line: ~        { z: z - 40 + adjacent.half,~
- Inside source: true
*** True Line Result
        { z: z - 40 + adjacent.half,
** Processing line: ~          x: x,~
- Inside source: true
*** True Line Result
          x: x,
** Processing line: ~          y: y + 75,~
- Inside source: true
*** True Line Result
          y: y + 75,
** Processing line: ~          w: 80, h: 80, angle_x: angle, path: "sprites/triangle/equilateral/blue.png" },~
- Inside source: true
*** True Line Result
          w: 80, h: 80, angle_x: angle, path: "sprites/triangle/equilateral/blue.png" },
** Processing line: ~        { z: z - 40,~
- Inside source: true
*** True Line Result
        { z: z - 40,
** Processing line: ~          x: x,~
- Inside source: true
*** True Line Result
          x: x,
** Processing line: ~          y: y - 400 + 80,~
- Inside source: true
*** True Line Result
          y: y - 400 + 80,
** Processing line: ~          w: 80, h: 400, path: "sprites/square/blue.png" },~
- Inside source: true
*** True Line Result
          w: 80, h: 400, path: "sprites/square/blue.png" },
** Processing line: ~      ]~
- Inside source: true
*** True Line Result
      ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      left_sprites = [~
- Inside source: true
*** True Line Result
      left_sprites = [
** Processing line: ~        { z: z,~
- Inside source: true
*** True Line Result
        { z: z,
** Processing line: ~          x: x - 40 + adjacent.half,~
- Inside source: true
*** True Line Result
          x: x - 40 + adjacent.half,
** Processing line: ~          y: y + 75,~
- Inside source: true
*** True Line Result
          y: y + 75,
** Processing line: ~          w: 80, h: 80, angle_x: -angle, angle_y: 90, path: "sprites/triangle/equilateral/blue.png" },~
- Inside source: true
*** True Line Result
          w: 80, h: 80, angle_x: -angle, angle_y: 90, path: "sprites/triangle/equilateral/blue.png" },
** Processing line: ~        { z: z,                      x: x - 40,~
- Inside source: true
*** True Line Result
        { z: z,                      x: x - 40,
** Processing line: ~          y: y - 400 + 80,~
- Inside source: true
*** True Line Result
          y: y - 400 + 80,
** Processing line: ~          w: 80, h: 400, angle_y: 90, path: "sprites/square/blue.png" },~
- Inside source: true
*** True Line Result
          w: 80, h: 400, angle_y: 90, path: "sprites/square/blue.png" },
** Processing line: ~      ]~
- Inside source: true
*** True Line Result
      ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      right_sprites = [~
- Inside source: true
*** True Line Result
      right_sprites = [
** Processing line: ~        { z: z,~
- Inside source: true
*** True Line Result
        { z: z,
** Processing line: ~          x: x + 40 - adjacent.half,~
- Inside source: true
*** True Line Result
          x: x + 40 - adjacent.half,
** Processing line: ~          y: y + 75,~
- Inside source: true
*** True Line Result
          y: y + 75,
** Processing line: ~          w: 80, h: 80, angle_x: angle, angle_y: 90, path: "sprites/triangle/equilateral/blue.png" },~
- Inside source: true
*** True Line Result
          w: 80, h: 80, angle_x: angle, angle_y: 90, path: "sprites/triangle/equilateral/blue.png" },
** Processing line: ~        { z: z,~
- Inside source: true
*** True Line Result
        { z: z,
** Processing line: ~          x: x + 40,~
- Inside source: true
*** True Line Result
          x: x + 40,
** Processing line: ~          y: y - 400 + 80,~
- Inside source: true
*** True Line Result
          y: y - 400 + 80,
** Processing line: ~          w: 80, h: 400, angle_y: 90, path: "sprites/square/blue.png" },~
- Inside source: true
*** True Line Result
          w: 80, h: 400, angle_y: 90, path: "sprites/square/blue.png" },
** Processing line: ~      ]~
- Inside source: true
*** True Line Result
      ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      front_sprites = [~
- Inside source: true
*** True Line Result
      front_sprites = [
** Processing line: ~        { z: z + 40 - adjacent.half,~
- Inside source: true
*** True Line Result
        { z: z + 40 - adjacent.half,
** Processing line: ~          x: x,~
- Inside source: true
*** True Line Result
          x: x,
** Processing line: ~          y: y + 75,~
- Inside source: true
*** True Line Result
          y: y + 75,
** Processing line: ~          w: 80, h: 80, angle_x: -angle, path: "sprites/triangle/equilateral/blue.png" },~
- Inside source: true
*** True Line Result
          w: 80, h: 80, angle_x: -angle, path: "sprites/triangle/equilateral/blue.png" },
** Processing line: ~        { z: z + 40,~
- Inside source: true
*** True Line Result
        { z: z + 40,
** Processing line: ~          x: x,~
- Inside source: true
*** True Line Result
          x: x,
** Processing line: ~          y: y - 400 + 80,~
- Inside source: true
*** True Line Result
          y: y - 400 + 80,
** Processing line: ~          w: 80, h: 400, path: "sprites/square/blue.png" },~
- Inside source: true
*** True Line Result
          w: 80, h: 400, path: "sprites/square/blue.png" },
** Processing line: ~      ]~
- Inside source: true
*** True Line Result
      ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if x > 700~
- Inside source: true
*** True Line Result
      if x > 700
** Processing line: ~        [~
- Inside source: true
*** True Line Result
        [
** Processing line: ~          back_sprites,~
- Inside source: true
*** True Line Result
          back_sprites,
** Processing line: ~          right_sprites,~
- Inside source: true
*** True Line Result
          right_sprites,
** Processing line: ~          front_sprites,~
- Inside source: true
*** True Line Result
          front_sprites,
** Processing line: ~          left_sprites,~
- Inside source: true
*** True Line Result
          left_sprites,
** Processing line: ~        ]~
- Inside source: true
*** True Line Result
        ]
** Processing line: ~      elsif x < 600~
- Inside source: true
*** True Line Result
      elsif x < 600
** Processing line: ~        [~
- Inside source: true
*** True Line Result
        [
** Processing line: ~          back_sprites,~
- Inside source: true
*** True Line Result
          back_sprites,
** Processing line: ~          left_sprites,~
- Inside source: true
*** True Line Result
          left_sprites,
** Processing line: ~          front_sprites,~
- Inside source: true
*** True Line Result
          front_sprites,
** Processing line: ~          right_sprites,~
- Inside source: true
*** True Line Result
          right_sprites,
** 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: ~          back_sprites,~
- Inside source: true
*** True Line Result
          back_sprites,
** Processing line: ~          left_sprites,~
- Inside source: true
*** True Line Result
          left_sprites,
** Processing line: ~          right_sprites,~
- Inside source: true
*** True Line Result
          right_sprites,
** Processing line: ~          front_sprites,~
- Inside source: true
*** True Line Result
          front_sprites,
** 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 tick~
- Inside source: true
*** True Line Result
    def tick
** Processing line: ~      state.z ||= 200~
- Inside source: true
*** True Line Result
      state.z ||= 200
** Processing line: ~      state.z += inputs.controller_one.right_analog_y_perc~
- Inside source: true
*** True Line Result
      state.z += inputs.controller_one.right_analog_y_perc
** Processing line: ~      state.columns ||= 100.map do~
- Inside source: true
*** True Line Result
      state.columns ||= 100.map do
** Processing line: ~        {~
- Inside source: true
*** True Line Result
        {
** Processing line: ~          x: rand(12) * 400,~
- Inside source: true
*** True Line Result
          x: rand(12) * 400,
** Processing line: ~          y: 0,~
- Inside source: true
*** True Line Result
          y: 0,
** Processing line: ~          z: rand(12) * 400,~
- Inside source: true
*** True Line Result
          z: rand(12) * 400,
** Processing line: ~        }~
- Inside source: true
*** True Line Result
        }
** Processing line: ~      end.sort_by { |col| -col.z }~
- Inside source: true
*** True Line Result
      end.sort_by { |col| -col.z }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      outputs.sprites << state.columns.map do |col|~
- Inside source: true
*** True Line Result
      outputs.sprites << state.columns.map do |col|
** Processing line: ~        citadel(col.x - 640, col.y - 400, state.z - col.z)~
- Inside source: true
*** True Line Result
        citadel(col.x - 640, col.y - 400, state.z - col.z)
** 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 = Game.new~
- Inside source: true
*** True Line Result
  $game = Game.new
** 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: ~    $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: ~*** 14 Vr - Flappy Vr - credits.txt~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Flappy Vr - 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/14_vr/07_flappy_vr/CREDITS.txt~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/07_flappy_vr/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: ~*** 14 Vr - Flappy Vr - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Flappy Vr - 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/14_vr/07_flappy_vr/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/07_flappy_vr/app/main.rb
** Processing line: ~  require 'app/tick.rb'~
- Inside source: true
*** True Line Result
  require 'app/tick.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.start_server! port: 9001, enable_in_prod: true~
- Inside source: true
*** True Line Result
    args.gtk.start_server! port: 9001, enable_in_prod: true
** Processing line: ~    tick_game args~
- Inside source: true
*** True Line Result
    tick_game 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: ~*** 14 Vr - Flappy Vr - tick.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** 14 Vr - Flappy Vr - tick.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/14_vr/07_flappy_vr/app/tick.rb~
- Inside source: true
*** True Line Result
  # ./samples/14_vr/07_flappy_vr/app/tick.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_starting_point      ||= 640~
- Inside source: true
*** True Line Result
      state.x_starting_point      ||= 640
** Processing line: ~      state.x                     ||= state.x_starting_point~
- Inside source: true
*** True Line Result
      state.x                     ||= state.x_starting_point
** Processing line: ~      state.y                     ||= 500~
- Inside source: true
*** True Line Result
      state.y                     ||= 500
** Processing line: ~      state.z                     ||= -120~
- Inside source: true
*** True Line Result
      state.z                     ||= -120
** 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, z: -640, text: "Flappy Dragon", size_enum: 50, alignment_enum: 1, **white }~
- Inside source: true
*** True Line Result
      outputs.labels << { x: 640, y: 700, z: -640, text: "Flappy Dragon", size_enum: 50, alignment_enum: 1, **white }
** Processing line: ~      outputs.labels << { x: 640, y: 500, z: -640, 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, z: -640, text: "Instructions: Press Spacebar to flap. Don't die.", size_enum: 4, alignment_enum: 1, **white }
** Processing line: ~      outputs.labels << { x: 430, y: 430, z: -640, text: "[Tab]    Change difficulty", size_enum: 4, alignment_enum: 0, **white }~
- Inside source: true
*** True Line Result
      outputs.labels << { x: 430, y: 430, z: -640, text: "[Tab]    Change difficulty", size_enum: 4, alignment_enum: 0, **white }
** Processing line: ~      outputs.labels << { x: 430, y: 400, z: -640, 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, z: -640, text: "[Enter]  Start at New Difficulty ", size_enum: 4, alignment_enum: 0, **white }
** Processing line: ~      outputs.labels << { x: 430, y: 370, z: -640, text: "[Escape] Cancel/Resume ", size_enum: 4, alignment_enum: 0, **white }~
- Inside source: true
*** True Line Result
      outputs.labels << { x: 430, y: 370, z: -640, text: "[Escape] Cancel/Resume ", size_enum: 4, alignment_enum: 0, **white }
** Processing line: ~      outputs.labels << { x: 640, y: 300, z: -640, 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, z: -640, text: "(mouse, touch, and game controllers work, too!) ", size_enum: 4, alignment_enum: 1, **white }
** Processing line: ~      outputs.labels << { x: 640, y: 200, z: -640, 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, z: -640, 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, z: -640, text: "Code:   @amirrajan",     **white }~
- Inside source: true
*** True Line Result
      outputs.labels << { x: 10, y: 100, z: -640, text: "Code:   @amirrajan",     **white }
** Processing line: ~      outputs.labels << { x: 10, y:  80, z: -640, text: "Art:    @mobypixel",     **white }~
- Inside source: true
*** True Line Result
      outputs.labels << { x: 10, y:  80, z: -640, text: "Art:    @mobypixel",     **white }
** Processing line: ~      outputs.labels << { x: 10, y:  60, z: -640, text: "Music:  @mobypixel",     **white }~
- Inside source: true
*** True Line Result
      outputs.labels << { x: 10, y:  60, z: -640, text: "Music:  @mobypixel",     **white }
** Processing line: ~      outputs.labels << { x: 10, y:  40, z: -640, text: "Engine: DragonRuby GTK", **white }~
- Inside source: true
*** True Line Result
      outputs.labels << { x: 10, y:  40, z: -640, 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 - overlay_rect.w,~
- Inside source: true
*** True Line Result
      outputs.primitives << { x: overlay_rect.x - overlay_rect.w,
** Processing line: ~                              y: overlay_rect.y - overlay_rect.h,~
- Inside source: true
*** True Line Result
                              y: overlay_rect.y - overlay_rect.h,
** Processing line: ~                              w: overlay_rect.w * 4,~
- Inside source: true
*** True Line Result
                              w: overlay_rect.w * 4,
** Processing line: ~                              h: overlay_rect.h * 2,~
- Inside source: true
*** True Line Result
                              h: overlay_rect.h * 2,
** 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: ~      outputs.background_color = [0, 0, 0]~
- Inside source: true
*** True Line Result
      outputs.background_color = [0, 0, 0]
** 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,     z: -120, size_enum: 20, alignment_enum: 1 }~
- Inside source: true
*** True Line Result
      outputs.labels << { x: 638, y: 358, text: score_text,     z: -120, size_enum: 20, alignment_enum: 1 }
** Processing line: ~      outputs.labels << { x: 635, y: 360, text: score_text,     z: -120, 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,     z: -120, size_enum: 20, alignment_enum: 1, r: 255, g: 255, b: 255 }
** Processing line: ~      outputs.labels << { x: 638, y: 428, text: countdown_text, z: -120, size_enum: 20, alignment_enum: 1 }~
- Inside source: true
*** True Line Result
      outputs.labels << { x: 638, y: 428, text: countdown_text, z: -120, size_enum: 20, alignment_enum: 1 }
** Processing line: ~      outputs.labels << { x: 635, y: 430, text: countdown_text, z: -120, 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, z: -120, 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: ~      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 << { x: -640, y: -360, z: -640, w: 1280 * 2, h: 720 * 2, path: 'sprites/background.png' }~
- Inside source: true
*** True Line Result
      outputs.sprites << { x: -640, y: -360, z: -640, w: 1280 * 2, h: 720 * 2, path: 'sprites/background.png' }
** Processing line: ~      outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_back.png',   0.25, 0)~
- Inside source: true
*** True Line Result
      outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_back.png',   0.25, 0)
** Processing line: ~      outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_middle.png', 0.50, 50)~
- Inside source: true
*** True Line Result
      outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_middle.png', 0.50, 50)
** Processing line: ~      outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_front.png',  1.00, 100, -80)~
- Inside source: true
*** True Line Result
      outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_front.png',  1.00, 100, -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, z, y = 0~
- Inside source: true
*** True Line Result
    def scrolling_background at, path, rate, z, y = 0
** Processing line: ~      rate *= 2~
- Inside source: true
*** True Line Result
      rate *= 2
** Processing line: ~      w = 1440 * 2~
- Inside source: true
*** True Line Result
      w = 1440 * 2
** Processing line: ~      h =  720 * 2~
- Inside source: true
*** True Line Result
      h =  720 * 2
** Processing line: ~      [~
- Inside source: true
*** True Line Result
      [
** Processing line: ~        { x: w - at.*(rate) % w - w.half.half, y: y * 2 - 360, z: -640 + z, w: w, h: h, path: path },~
- Inside source: true
*** True Line Result
        { x: w - at.*(rate) % w - w.half.half, y: y * 2 - 360, z: -640 + z, w: w, h: h, path: path },
** Processing line: ~        { x: 0 - at.*(rate) % w - w.half.half, y: y * 2 - 360, z: -640 + z, w: w, h: h, path: path },~
- Inside source: true
*** True Line Result
        { x: 0 - at.*(rate) % w - w.half.half, y: y * 2 - 360, z: -640 + z, w: w, h: h, 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.top_section = { x: w.x,~
- Inside source: true
*** True Line Result
        w.top_section = { x: w.x,
** Processing line: ~                          y: w.bottom_height - 720,~
- Inside source: true
*** True Line Result
                          y: w.bottom_height - 720,
** Processing line: ~                          z: -120,~
- Inside source: true
*** True Line Result
                          z: -120,
** Processing line: ~                          w: 100,~
- Inside source: true
*** True Line Result
                          w: 100,
** Processing line: ~                          h: 720,~
- Inside source: true
*** True Line Result
                          h: 720,
** Processing line: ~                          path: 'sprites/wall.png',~
- Inside source: true
*** True Line Result
                          path: 'sprites/wall.png',
** Processing line: ~                          angle: 180 }~
- Inside source: true
*** True Line Result
                          angle: 180 }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        w.bottom_section = { x: w.x,~
- Inside source: true
*** True Line Result
        w.bottom_section = { x: w.x,
** Processing line: ~                             y: w.top_y,~
- Inside source: true
*** True Line Result
                             y: w.top_y,
** Processing line: ~                             z: -120,~
- Inside source: true
*** True Line Result
                             z: -120,
** Processing line: ~                             w: 100,~
- Inside source: true
*** True Line Result
                             w: 100,
** Processing line: ~                             h: 720,~
- Inside source: true
*** True Line Result
                             h: 720,
** Processing line: ~                             path: 'sprites/wallbottom.png',~
- Inside source: true
*** True Line Result
                             path: 'sprites/wallbottom.png',
** Processing line: ~                             angle: 0}~
- Inside source: true
*** True Line Result
                             angle: 0}
** Processing line: ~        w.sprites = [~
- Inside source: true
*** True Line Result
        w.sprites = [
** Processing line: ~          model_for(w.top_section),~
- Inside source: true
*** True Line Result
          model_for(w.top_section),
** Processing line: ~          model_for(w.bottom_section)~
- Inside source: true
*** True Line Result
          model_for(w.bottom_section)
** 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.sprites << state.walls.find_all { |w| w.x >= state.x }.reverse.map(&:sprites)~
- Inside source: true
*** True Line Result
      outputs.sprites << state.walls.find_all { |w| w.x >= state.x }.reverse.map(&:sprites)
** Processing line: ~      outputs.sprites << state.walls.find_all { |w| w.x <  state.x }.map(&:sprites)~
- Inside source: true
*** True Line Result
      outputs.sprites << state.walls.find_all { |w| w.x <  state.x }.map(&:sprites)
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def model_for wall~
- Inside source: true
*** True Line Result
    def model_for wall
** Processing line: ~      ratio = (wall.x - state.x_starting_point).abs.fdiv(2560 + state.x_starting_point)~
- Inside source: true
*** True Line Result
      ratio = (wall.x - state.x_starting_point).abs.fdiv(2560 + state.x_starting_point)
** Processing line: ~      z_ratio = ratio ** 2~
- Inside source: true
*** True Line Result
      z_ratio = ratio ** 2
** Processing line: ~      z_offset = (2560 * 2) * z_ratio~
- Inside source: true
*** True Line Result
      z_offset = (2560 * 2) * z_ratio
** Processing line: ~      x_offset = z_offset * 0.25~
- Inside source: true
*** True Line Result
      x_offset = z_offset * 0.25
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if wall.x < state.x~
- Inside source: true
*** True Line Result
      if wall.x < state.x
** Processing line: ~        x_offset *= -1~
- Inside source: true
*** True Line Result
        x_offset *= -1
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      a = 255 * (1 - z_ratio)~
- Inside source: true
*** True Line Result
      a = 255 * (1 - z_ratio)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      back  = { x:     wall.x + x_offset,~
- Inside source: true
*** True Line Result
      back  = { x:     wall.x + x_offset,
** Processing line: ~                y:     wall.y,~
- Inside source: true
*** True Line Result
                y:     wall.y,
** Processing line: ~                z:     wall.z - wall.w.half - z_offset,~
- Inside source: true
*** True Line Result
                z:     wall.z - wall.w.half - z_offset,
** Processing line: ~                a:     a,~
- Inside source: true
*** True Line Result
                a:     a,
** Processing line: ~                w:     wall.w,~
- Inside source: true
*** True Line Result
                w:     wall.w,
** Processing line: ~                h:     wall.h,~
- Inside source: true
*** True Line Result
                h:     wall.h,
** Processing line: ~                path:  wall.path,~
- Inside source: true
*** True Line Result
                path:  wall.path,
** Processing line: ~                angle: wall.angle }~
- Inside source: true
*** True Line Result
                angle: wall.angle }
** Processing line: ~      front = { x:     wall.x + x_offset,~
- Inside source: true
*** True Line Result
      front = { x:     wall.x + x_offset,
** Processing line: ~                y:     wall.y,~
- Inside source: true
*** True Line Result
                y:     wall.y,
** Processing line: ~                z:     wall.z + wall.w.half - z_offset,~
- Inside source: true
*** True Line Result
                z:     wall.z + wall.w.half - z_offset,
** Processing line: ~                a:     a,~
- Inside source: true
*** True Line Result
                a:     a,
** Processing line: ~                w:     wall.w,~
- Inside source: true
*** True Line Result
                w:     wall.w,
** Processing line: ~                h:     wall.h,~
- Inside source: true
*** True Line Result
                h:     wall.h,
** Processing line: ~                path:  wall.path,~
- Inside source: true
*** True Line Result
                path:  wall.path,
** Processing line: ~                angle: wall.angle }~
- Inside source: true
*** True Line Result
                angle: wall.angle }
** Processing line: ~      left  = { x:     wall.x - wall.w.half + x_offset,~
- Inside source: true
*** True Line Result
      left  = { x:     wall.x - wall.w.half + x_offset,
** Processing line: ~                y:     wall.y,~
- Inside source: true
*** True Line Result
                y:     wall.y,
** Processing line: ~                z:     wall.z - z_offset,~
- Inside source: true
*** True Line Result
                z:     wall.z - z_offset,
** Processing line: ~                a:     a,~
- Inside source: true
*** True Line Result
                a:     a,
** Processing line: ~                angle_y: 90,~
- Inside source: true
*** True Line Result
                angle_y: 90,
** Processing line: ~                w:     wall.w,~
- Inside source: true
*** True Line Result
                w:     wall.w,
** Processing line: ~                h:     wall.h,~
- Inside source: true
*** True Line Result
                h:     wall.h,
** Processing line: ~                path:  wall.path,~
- Inside source: true
*** True Line Result
                path:  wall.path,
** Processing line: ~                angle: wall.angle }~
- Inside source: true
*** True Line Result
                angle: wall.angle }
** Processing line: ~      right = { x:     wall.x + wall.w.half + x_offset,~
- Inside source: true
*** True Line Result
      right = { x:     wall.x + wall.w.half + x_offset,
** Processing line: ~                y:     wall.y,~
- Inside source: true
*** True Line Result
                y:     wall.y,
** Processing line: ~                z:     wall.z - z_offset,~
- Inside source: true
*** True Line Result
                z:     wall.z - z_offset,
** Processing line: ~                a:     a,~
- Inside source: true
*** True Line Result
                a:     a,
** Processing line: ~                angle_y: 90,~
- Inside source: true
*** True Line Result
                angle_y: 90,
** Processing line: ~                w:     wall.w,~
- Inside source: true
*** True Line Result
                w:     wall.w,
** Processing line: ~                h:     wall.h,~
- Inside source: true
*** True Line Result
                h:     wall.h,
** Processing line: ~                path:  wall.path,~
- Inside source: true
*** True Line Result
                path:  wall.path,
** Processing line: ~                angle: wall.angle }~
- Inside source: true
*** True Line Result
                angle: wall.angle }
** Processing line: ~      if    (wall.x - wall.w - state.x).abs < 200~
- Inside source: true
*** True Line Result
      if    (wall.x - wall.w - state.x).abs < 200
** Processing line: ~        [back, left, right, front]~
- Inside source: true
*** True Line Result
        [back, left, right, front]
** Processing line: ~      elsif wall.x < state.x~
- Inside source: true
*** True Line Result
      elsif wall.x < state.x
** Processing line: ~        [back, left, front, right]~
- Inside source: true
*** True Line Result
        [back, left, front, right]
** Processing line: ~      else~
- Inside source: true
*** True Line Result
      else
** Processing line: ~        [back, right, front, left]~
- Inside source: true
*** True Line Result
        [back, right, front, left]
** Processing line: ~      end~
- Inside source: true
*** True 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_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, z: state.z, 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, z: state.z, 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, z: state.z, 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, z: state.z, 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: ~        state.z     += 0.3~
- Inside source: true
*** True Line Result
        state.z     += 0.3
** 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 < -2560 + state.x_starting_point }~
- Inside source: true
*** True Line Result
      state.walls.reject! { |w| w.x < -2560 + state.x_starting_point }
** 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             = 2560 + state.x_starting_point~
- Inside source: true
*** True Line Result
        w.x             = 2560 + state.x_starting_point
** 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.opening -= w.opening * 0.5~
- Inside source: true
*** True Line Result
        w.opening -= w.opening * 0.5
** 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: ~      { x: state.dragon_sprite.x,~
- Inside source: true
*** True Line Result
      { x: state.dragon_sprite.x,
** Processing line: ~        y: state.dragon_sprite.y,~
- Inside source: true
*** True Line Result
        y: state.dragon_sprite.y,
** Processing line: ~        w: state.dragon_sprite.w,~
- Inside source: true
*** True Line Result
        w: state.dragon_sprite.w,
** Processing line: ~        h: state.dragon_sprite.h }~
- Inside source: true
*** True Line Result
        h: state.dragon_sprite.h }
** 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: ~           .find_all { |w| w.top_section && w.bottom_section }~
- Inside source: true
*** True Line Result
           .find_all { |w| w.top_section && w.bottom_section }
** Processing line: ~           .flat_map { |w| [w.top_section, w.bottom_section] }~
- Inside source: true
*** True Line Result
           .flat_map { |w| [w.top_section, w.bottom_section] }
** Processing line: ~           .any?     { |s| s.intersect_rect?(dragon_collision_box) }~
- Inside source: true
*** True Line Result
           .any?     { |s| s.intersect_rect?(dragon_collision_box) }
** 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.x =  state.x_starting_point~
- Inside source: true
*** True Line Result
      state.x =  state.x_starting_point
** Processing line: ~      state.z = -120~
- Inside source: true
*** True Line Result
      state.z = -120
** 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_game args~
- Inside source: true
*** True Line Result
  def tick_game 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: ~  $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 - 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 "<NVertices NFaces NEdges> 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 "<NVertices NFaces NEdges> 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 - Shadows - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Platformer - Shadows - 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/shadows/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/99_genre_platformer/shadows/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: ~      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: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def defaults~
- Inside source: true
*** True Line Result
    def defaults
** Processing line: ~      new_game if !state.clock || state.game_over == true~
- Inside source: true
*** True Line Result
      new_game if !state.clock || state.game_over == true
** 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_entity player,~
- Inside source: true
*** True Line Result
      input_entity player,
** Processing line: ~                   find_input_timeline(at: player.clock, key: :left_right),~
- Inside source: true
*** True Line Result
                   find_input_timeline(at: player.clock, key: :left_right),
** Processing line: ~                   find_input_timeline(at: player.clock, key: :space),~
- Inside source: true
*** True Line Result
                   find_input_timeline(at: player.clock, key: :space),
** Processing line: ~                   find_input_timeline(at: player.clock, key: :down)~
- Inside source: true
*** True Line Result
                   find_input_timeline(at: player.clock, key: :down)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      shadows.find_all { |shadow| entity_active? shadow }~
- Inside source: true
*** True Line Result
      shadows.find_all { |shadow| entity_active? shadow }
** Processing line: ~             .each do |shadow|~
- Inside source: true
*** True Line Result
             .each do |shadow|
** Processing line: ~               input_entity shadow,~
- Inside source: true
*** True Line Result
               input_entity shadow,
** Processing line: ~                            find_input_timeline(at: shadow.clock, key: :left_right),~
- Inside source: true
*** True Line Result
                            find_input_timeline(at: shadow.clock, key: :left_right),
** Processing line: ~                            find_input_timeline(at: shadow.clock, key: :space),~
- Inside source: true
*** True Line Result
                            find_input_timeline(at: shadow.clock, key: :space),
** Processing line: ~                            find_input_timeline(at: shadow.clock, key: :down)~
- Inside source: true
*** True Line Result
                            find_input_timeline(at: shadow.clock, key: :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 input_entity entity, left_right, jump, fall_through~
- Inside source: true
*** True Line Result
    def input_entity entity, left_right, jump, fall_through
** Processing line: ~      return if !entity_active? entity~
- Inside source: true
*** True Line Result
      return if !entity_active? entity
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      entity.dx += left_right~
- Inside source: true
*** True Line Result
      entity.dx += left_right
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if left_right == 0~
- Inside source: true
*** True Line Result
      if left_right == 0
** Processing line: ~        if (entity.action == :running)~
- Inside source: true
*** True Line Result
        if (entity.action == :running)
** Processing line: ~          entity_set_action! entity, :standing~
- Inside source: true
*** True Line Result
          entity_set_action! entity, :standing
** Processing line: ~        end~
- Inside source: true
*** True Line Result
        end
** Processing line: ~      elsif entity.left_right != left_right && (entity_on_platform? entity)~
- Inside source: true
*** True Line Result
      elsif entity.left_right != left_right && (entity_on_platform? entity)
** Processing line: ~        entity_set_action! entity, :running~
- Inside source: true
*** True Line Result
        entity_set_action! entity, :running
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      entity.left_right = left_right~
- Inside source: true
*** True Line Result
      entity.left_right = left_right
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      entity.orientation = if left_right == -1~
- Inside source: true
*** True Line Result
      entity.orientation = if left_right == -1
** Processing line: ~                             :left~
- Inside source: true
*** True Line Result
                             :left
** Processing line: ~                           elsif left_right == 1~
- Inside source: true
*** True Line Result
                           elsif left_right == 1
** Processing line: ~                             :right~
- Inside source: true
*** True Line Result
                             :right
** Processing line: ~                           else~
- Inside source: true
*** True Line Result
                           else
** Processing line: ~                             entity.orientation~
- Inside source: true
*** True Line Result
                             entity.orientation
** Processing line: ~                           end~
- Inside source: true
*** True Line Result
                           end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if fall_through && (entity_on_platform? entity)~
- Inside source: true
*** True Line Result
      if fall_through && (entity_on_platform? entity)
** Processing line: ~        entity.jumped_at      = 0~
- Inside source: true
*** True Line Result
        entity.jumped_at      = 0
** Processing line: ~        entity.jumped_down_at = entity.clock~
- Inside source: true
*** True Line Result
        entity.jumped_down_at = entity.clock
** Processing line: ~        entity.jump_count    += 1~
- Inside source: true
*** True Line Result
        entity.jump_count    += 1
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if jump && entity.jump_count < 3~
- Inside source: true
*** True Line Result
      if jump && entity.jump_count < 3
** Processing line: ~        if entity.jump_count == 0~
- Inside source: true
*** True Line Result
        if entity.jump_count == 0
** Processing line: ~          entity_set_action! entity, :first_jump~
- Inside source: true
*** True Line Result
          entity_set_action! entity, :first_jump
** Processing line: ~        elsif entity.jump_count == 1~
- Inside source: true
*** True Line Result
        elsif entity.jump_count == 1
** Processing line: ~          entity_set_action! entity, :midair_jump~
- Inside source: true
*** True Line Result
          entity_set_action! entity, :midair_jump
** Processing line: ~        elsif entity.jump_count == 2~
- Inside source: true
*** True Line Result
        elsif entity.jump_count == 2
** Processing line: ~          entity_set_action! entity, :midair_jump~
- Inside source: true
*** True Line Result
          entity_set_action! entity, :midair_jump
** Processing line: ~        end~
- Inside source: true
*** True Line Result
        end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        entity.dy             = entity.jump_power~
- Inside source: true
*** True Line Result
        entity.dy             = entity.jump_power
** Processing line: ~        entity.jumped_at      = entity.clock~
- Inside source: true
*** True Line Result
        entity.jumped_at      = entity.clock
** Processing line: ~        entity.jumped_down_at = 0~
- Inside source: true
*** True Line Result
        entity.jumped_down_at = 0
** Processing line: ~        entity.jump_count    += 1~
- Inside source: true
*** True Line Result
        entity.jump_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: ~    def calc~
- Inside source: true
*** True Line Result
    def calc
** Processing line: ~      calc_light_meter~
- Inside source: true
*** True Line Result
      calc_light_meter
** Processing line: ~      calc_action_history~
- Inside source: true
*** True Line Result
      calc_action_history
** Processing line: ~      calc_entity player~
- Inside source: true
*** True Line Result
      calc_entity player
** Processing line: ~      calc_shadows~
- Inside source: true
*** True Line Result
      calc_shadows
** Processing line: ~      calc_light_crystal~
- Inside source: true
*** True Line Result
      calc_light_crystal
** Processing line: ~      calc_render_queues~
- Inside source: true
*** True Line Result
      calc_render_queues
** Processing line: ~      calc_game_over~
- Inside source: true
*** True Line Result
      calc_game_over
** Processing line: ~      calc_clock~
- Inside source: true
*** True Line Result
      calc_clock
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_light_meter~
- Inside source: true
*** True Line Result
    def calc_light_meter
** Processing line: ~      state.light_meter -= 1~
- Inside source: true
*** True Line Result
      state.light_meter -= 1
** Processing line: ~      d = state.light_meter_queue * 0.1~
- Inside source: true
*** True Line Result
      d = state.light_meter_queue * 0.1
** Processing line: ~      state.light_meter += d~
- Inside source: true
*** True Line Result
      state.light_meter += d
** Processing line: ~      state.light_meter_queue -= d~
- Inside source: true
*** True Line Result
      state.light_meter_queue -= d
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_action_history~
- Inside source: true
*** True Line Result
    def calc_action_history
** Processing line: ~      state.curr_left_right     = inputs.left_right~
- Inside source: true
*** True Line Result
      state.curr_left_right     = inputs.left_right
** Processing line: ~      if state.prev_left_right != state.curr_left_right~
- Inside source: true
*** True Line Result
      if state.prev_left_right != state.curr_left_right
** Processing line: ~        state.input_timeline.unshift({ at: state.clock, k: :left_right, v: state.curr_left_right })~
- Inside source: true
*** True Line Result
        state.input_timeline.unshift({ at: state.clock, k: :left_right, v: state.curr_left_right })
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~      state.prev_left_right = state.curr_left_right~
- Inside source: true
*** True Line Result
      state.prev_left_right = state.curr_left_right
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.curr_space     = inputs.keyboard.key_down.space    ||~
- Inside source: true
*** True Line Result
      state.curr_space     = inputs.keyboard.key_down.space    ||
** Processing line: ~                             inputs.controller_one.key_down.a  ||~
- Inside source: true
*** True Line Result
                             inputs.controller_one.key_down.a  ||
** Processing line: ~                             inputs.keyboard.key_down.up       ||~
- Inside source: true
*** True Line Result
                             inputs.keyboard.key_down.up       ||
** Processing line: ~                             inputs.controller_one.key_down.b~
- Inside source: true
*** True Line Result
                             inputs.controller_one.key_down.b
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if state.prev_space != state.curr_space~
- Inside source: true
*** True Line Result
      if state.prev_space != state.curr_space
** Processing line: ~        state.input_timeline.unshift({ at: state.clock, k: :space, v: state.curr_space })~
- Inside source: true
*** True Line Result
        state.input_timeline.unshift({ at: state.clock, k: :space, v: state.curr_space })
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~      state.prev_space = state.curr_space~
- Inside source: true
*** True Line Result
      state.prev_space = state.curr_space
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.curr_down     = inputs.keyboard.down || inputs.controller_one.down~
- Inside source: true
*** True Line Result
      state.curr_down     = inputs.keyboard.down || inputs.controller_one.down
** Processing line: ~      if state.prev_down != state.curr_down~
- Inside source: true
*** True Line Result
      if state.prev_down != state.curr_down
** Processing line: ~        state.input_timeline.unshift({ at: state.clock, k: :down, v: state.curr_down })~
- Inside source: true
*** True Line Result
        state.input_timeline.unshift({ at: state.clock, k: :down, v: state.curr_down })
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~      state.prev_down = state.curr_down~
- Inside source: true
*** True Line Result
      state.prev_down = state.curr_down
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_entity entity~
- Inside source: true
*** True Line Result
    def calc_entity entity
** Processing line: ~      calc_entity_rect entity~
- Inside source: true
*** True Line Result
      calc_entity_rect entity
** Processing line: ~      return if !entity_active? entity~
- Inside source: true
*** True Line Result
      return if !entity_active? entity
** Processing line: ~      calc_entity_collision entity~
- Inside source: true
*** True Line Result
      calc_entity_collision entity
** Processing line: ~      calc_entity_action entity~
- Inside source: true
*** True Line Result
      calc_entity_action entity
** Processing line: ~      calc_entity_movement entity~
- Inside source: true
*** True Line Result
      calc_entity_movement entity
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_entity_rect entity~
- Inside source: true
*** True Line Result
    def calc_entity_rect entity
** Processing line: ~      entity.render_rect = { x: entity.x, y: entity.y, w: entity.w, h: entity.h }~
- Inside source: true
*** True Line Result
      entity.render_rect = { x: entity.x, y: entity.y, w: entity.w, h: entity.h }
** Processing line: ~      entity.rect = entity.render_rect.merge x: entity.render_rect.x + entity.render_rect.w * 0.33,~
- Inside source: true
*** True Line Result
      entity.rect = entity.render_rect.merge x: entity.render_rect.x + entity.render_rect.w * 0.33,
** Processing line: ~                                             w: entity.render_rect.w * 0.33~
- Inside source: true
*** True Line Result
                                             w: entity.render_rect.w * 0.33
** Processing line: ~      entity.next_rect = entity.rect.merge x: entity.x + entity.dx,~
- Inside source: true
*** True Line Result
      entity.next_rect = entity.rect.merge x: entity.x + entity.dx,
** Processing line: ~                                           y: entity.y + entity.dy~
- Inside source: true
*** True Line Result
                                           y: entity.y + entity.dy
** Processing line: ~      entity.prev_rect = entity.rect.merge x: entity.x - entity.dx,~
- Inside source: true
*** True Line Result
      entity.prev_rect = entity.rect.merge x: entity.x - entity.dx,
** Processing line: ~                                           y: entity.y - entity.dy~
- Inside source: true
*** True Line Result
                                           y: entity.y - entity.dy
** Processing line: ~      orientation_shift = 0~
- Inside source: true
*** True Line Result
      orientation_shift = 0
** Processing line: ~      if entity.orientation == :right~
- Inside source: true
*** True Line Result
      if entity.orientation == :right
** Processing line: ~        orientation_shift = entity.rect.w.half~
- Inside source: true
*** True Line Result
        orientation_shift = entity.rect.w.half
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~      entity.hurt_rect  = entity.rect.merge y: entity.rect.y + entity.h * 0.33,~
- Inside source: true
*** True Line Result
      entity.hurt_rect  = entity.rect.merge y: entity.rect.y + entity.h * 0.33,
** Processing line: ~                                            x: entity.rect.x - entity.rect.w.half + orientation_shift,~
- Inside source: true
*** True Line Result
                                            x: entity.rect.x - entity.rect.w.half + orientation_shift,
** Processing line: ~                                            h: entity.rect.h * 0.33~
- Inside source: true
*** True Line Result
                                            h: entity.rect.h * 0.33
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_entity_collision entity~
- Inside source: true
*** True Line Result
    def calc_entity_collision entity
** Processing line: ~      calc_entity_below entity~
- Inside source: true
*** True Line Result
      calc_entity_below entity
** Processing line: ~      calc_entity_left entity~
- Inside source: true
*** True Line Result
      calc_entity_left entity
** Processing line: ~      calc_entity_right entity~
- Inside source: true
*** True Line Result
      calc_entity_right entity
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_entity_below entity~
- Inside source: true
*** True Line Result
    def calc_entity_below entity
** Processing line: ~      return unless entity.dy < 0~
- Inside source: true
*** True Line Result
      return unless entity.dy < 0
** Processing line: ~      tiles_below = find_tiles { |t| t.rect.top <= entity.prev_rect.y }~
- Inside source: true
*** True Line Result
      tiles_below = find_tiles { |t| t.rect.top <= entity.prev_rect.y }
** Processing line: ~      collision = find_collision tiles_below, (entity.rect.merge y: entity.next_rect.y)~
- Inside source: true
*** True Line Result
      collision = find_collision tiles_below, (entity.rect.merge y: entity.next_rect.y)
** Processing line: ~      return unless collision~
- Inside source: true
*** True Line Result
      return unless collision
** Processing line: ~      can_drop = true~
- Inside source: true
*** True Line Result
      can_drop = true
** Processing line: ~      if entity.last_standing_at && (entity.clock - entity.last_standing_at) < 8~
- Inside source: true
*** True Line Result
      if entity.last_standing_at && (entity.clock - entity.last_standing_at) < 8
** Processing line: ~        can_drop = false~
- Inside source: true
*** True Line Result
        can_drop = false
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if can_drop && entity.jumped_down_at.elapsed_time(entity.clock) < 10 && !collision.impassable~
- Inside source: true
*** True Line Result
      if can_drop && entity.jumped_down_at.elapsed_time(entity.clock) < 10 && !collision.impassable
** Processing line: ~        if (entity_on_platform? entity) && can_drop~
- Inside source: true
*** True Line Result
        if (entity_on_platform? entity) && can_drop
** Processing line: ~          entity.dy = -1~
- Inside source: true
*** True Line Result
          entity.dy = -1
** Processing line: ~        end~
- Inside source: true
*** True Line Result
        end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        entity.jump_count = 1~
- Inside source: true
*** True Line Result
        entity.jump_count = 1
** Processing line: ~      else~
- Inside source: true
*** True Line Result
      else
** Processing line: ~        entity.y  = collision.rect.y + collision.rect.h~
- Inside source: true
*** True Line Result
        entity.y  = collision.rect.y + collision.rect.h
** Processing line: ~        entity.dy = 0~
- Inside source: true
*** True Line Result
        entity.dy = 0
** Processing line: ~        entity.jump_count = 0~
- Inside source: true
*** True Line Result
        entity.jump_count = 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_entity_left entity~
- Inside source: true
*** True Line Result
    def calc_entity_left entity
** Processing line: ~      return unless entity.dx < 0~
- Inside source: true
*** True Line Result
      return unless entity.dx < 0
** Processing line: ~      return if entity.next_rect.x > 8 - 32~
- Inside source: true
*** True Line Result
      return if entity.next_rect.x > 8 - 32
** Processing line: ~      entity.x  = 8 - 32~
- Inside source: true
*** True Line Result
      entity.x  = 8 - 32
** Processing line: ~      entity.dx = 0~
- Inside source: true
*** True Line Result
      entity.dx = 0
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_entity_right entity~
- Inside source: true
*** True Line Result
    def calc_entity_right entity
** Processing line: ~      return unless entity.dx > 0~
- Inside source: true
*** True Line Result
      return unless entity.dx > 0
** Processing line: ~      return if (entity.next_rect.x + entity.rect.w) < (1280 - 8 - 32)~
- Inside source: true
*** True Line Result
      return if (entity.next_rect.x + entity.rect.w) < (1280 - 8 - 32)
** Processing line: ~      entity.x  = (1280 - 8 - entity.rect.w - 32)~
- Inside source: true
*** True Line Result
      entity.x  = (1280 - 8 - entity.rect.w - 32)
** Processing line: ~      entity.dx = 0~
- Inside source: true
*** True Line Result
      entity.dx = 0
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_entity_action entity~
- Inside source: true
*** True Line Result
    def calc_entity_action entity
** Processing line: ~      if entity.dy < 0~
- Inside source: true
*** True Line Result
      if entity.dy < 0
** Processing line: ~        if entity.action == :midair_jump~
- Inside source: true
*** True Line Result
        if entity.action == :midair_jump
** Processing line: ~          if entity_action_complete? entity, state.midair_jump_duration~
- Inside source: true
*** True Line Result
          if entity_action_complete? entity, state.midair_jump_duration
** Processing line: ~            entity_set_action! entity, :falling~
- Inside source: true
*** True Line Result
            entity_set_action! entity, :falling
** Processing line: ~          end~
- Inside source: true
*** True Line Result
          end
** Processing line: ~        else~
- Inside source: true
*** True Line Result
        else
** Processing line: ~          entity_set_action! entity, :falling~
- Inside source: true
*** True Line Result
          entity_set_action! entity, :falling
** Processing line: ~        end~
- Inside source: true
*** True Line Result
        end
** Processing line: ~      elsif entity.dy == 0 && !(entity_on_platform? entity)~
- Inside source: true
*** True Line Result
      elsif entity.dy == 0 && !(entity_on_platform? entity)
** Processing line: ~        if entity.left_right == 0~
- Inside source: true
*** True Line Result
        if entity.left_right == 0
** Processing line: ~          entity_set_action! entity, :standing~
- Inside source: true
*** True Line Result
          entity_set_action! entity, :standing
** Processing line: ~        else~
- Inside source: true
*** True Line Result
        else
** Processing line: ~          entity_set_action! entity, :running~
- Inside source: true
*** True Line Result
          entity_set_action! entity, :running
** 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_entity_movement entity~
- Inside source: true
*** True Line Result
    def calc_entity_movement entity
** Processing line: ~      calc_entity_dy entity~
- Inside source: true
*** True Line Result
      calc_entity_dy entity
** Processing line: ~      calc_entity_dx entity~
- Inside source: true
*** True Line Result
      calc_entity_dx entity
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_entity_dx entity~
- Inside source: true
*** True Line Result
    def calc_entity_dx entity
** Processing line: ~      entity.dx  = entity.dx.clamp(-5,  5)~
- Inside source: true
*** True Line Result
      entity.dx  = entity.dx.clamp(-5,  5)
** Processing line: ~      entity.dx *= 0.9~
- Inside source: true
*** True Line Result
      entity.dx *= 0.9
** Processing line: ~      entity.x  += entity.dx~
- Inside source: true
*** True Line Result
      entity.x  += entity.dx
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def calc_entity_dy entity~
- Inside source: true
*** True Line Result
    def calc_entity_dy entity
** Processing line: ~      entity.y  += entity.dy~
- Inside source: true
*** True Line Result
      entity.y  += entity.dy
** Processing line: ~      entity.dy += state.gravity~
- Inside source: true
*** True Line Result
      entity.dy += state.gravity
** Processing line: ~      entity.dy += entity.dy * state.drag ** 2 * -1~
- Inside source: true
*** True Line Result
      entity.dy += entity.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 calc_shadows~
- Inside source: true
*** True Line Result
    def calc_shadows
** Processing line: ~      add_shadow! if state.clock.zmod?(300)~
- Inside source: true
*** True Line Result
      add_shadow! if state.clock.zmod?(300)
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      shadows.each do |shadow|~
- Inside source: true
*** True Line Result
      shadows.each do |shadow|
** Processing line: ~        calc_entity shadow~
- Inside source: true
*** True Line Result
        calc_entity shadow
** Processing line: ~        shadow.spawn_countdown -= 1 if shadow.spawn_countdown > 0~
- Inside source: true
*** True Line Result
        shadow.spawn_countdown -= 1 if shadow.spawn_countdown > 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_light_crystal~
- Inside source: true
*** True Line Result
    def calc_light_crystal
** Processing line: ~      light_rect = state.light_crystal~
- Inside source: true
*** True Line Result
      light_rect = state.light_crystal
** Processing line: ~      if player.hurt_rect.intersect_rect? light_rect~
- Inside source: true
*** True Line Result
      if player.hurt_rect.intersect_rect? light_rect
** Processing line: ~        state.jitter_fade_out_render_queue << { x:    state.light_crystal.x,~
- Inside source: true
*** True Line Result
        state.jitter_fade_out_render_queue << { x:    state.light_crystal.x,
** Processing line: ~                                                y:    state.light_crystal.y,~
- Inside source: true
*** True Line Result
                                                y:    state.light_crystal.y,
** Processing line: ~                                                w:    state.light_crystal.w,~
- Inside source: true
*** True Line Result
                                                w:    state.light_crystal.w,
** Processing line: ~                                                h:    state.light_crystal.h,~
- Inside source: true
*** True Line Result
                                                h:    state.light_crystal.h,
** Processing line: ~                                                a:    255,~
- Inside source: true
*** True Line Result
                                                a:    255,
** Processing line: ~                                                path: 'sprites/light.png' }~
- Inside source: true
*** True Line Result
                                                path: 'sprites/light.png' }
** Processing line: ~        state.light_meter_queue += 600~
- Inside source: true
*** True Line Result
        state.light_meter_queue += 600
** Processing line: ~        state.light_crystal = new_light_crystal~
- Inside source: true
*** True Line Result
        state.light_crystal = new_light_crystal
** Processing line: ~      end~
- Inside source: true
*** True 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_render_queues~
- Inside source: true
*** True Line Result
    def calc_render_queues
** Processing line: ~      state.jitter_fade_out_render_queue.each do |s|~
- Inside source: true
*** True Line Result
      state.jitter_fade_out_render_queue.each do |s|
** Processing line: ~        new_w = s.w * 1.02 ** 5~
- Inside source: true
*** True Line Result
        new_w = s.w * 1.02 ** 5
** Processing line: ~        ds = new_w - s.w~
- Inside source: true
*** True Line Result
        ds = new_w - s.w
** Processing line: ~        s.w = new_w~
- Inside source: true
*** True Line Result
        s.w = new_w
** Processing line: ~        s.h = new_w~
- Inside source: true
*** True Line Result
        s.h = new_w
** Processing line: ~        s.x -= ds.half~
- Inside source: true
*** True Line Result
        s.x -= ds.half
** Processing line: ~        s.y -= ds.half~
- Inside source: true
*** True Line Result
        s.y -= ds.half
** Processing line: ~        s.a = s.a * 0.97 ** 5~
- Inside source: true
*** True Line Result
        s.a = s.a * 0.97 ** 5
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.jitter_fade_out_render_queue.reject! { |s| s.a <= 1 }~
- Inside source: true
*** True Line Result
      state.jitter_fade_out_render_queue.reject! { |s| s.a <= 1 }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.game_over_render_queue.each { |s| s.a = s.a * 0.95 }~
- Inside source: true
*** True Line Result
      state.game_over_render_queue.each { |s| s.a = s.a * 0.95 }
** Processing line: ~      state.game_over_render_queue.reject! { |s| s.a <= 1 }~
- Inside source: true
*** True Line Result
      state.game_over_render_queue.reject! { |s| s.a <= 1 }
** 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: ~      state.game_over = false~
- Inside source: true
*** True Line Result
      state.game_over = false
** Processing line: ~      state.game_over ||= shadows.find_all { |s| s.spawn_countdown <= 0 }~
- Inside source: true
*** True Line Result
      state.game_over ||= shadows.find_all { |s| s.spawn_countdown <= 0 }
** Processing line: ~                                 .any? { |s| s.hurt_rect.intersect_rect? player.hurt_rect }~
- Inside source: true
*** True Line Result
                                 .any? { |s| s.hurt_rect.intersect_rect? player.hurt_rect }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.game_over ||= state.light_meter <= 1~
- Inside source: true
*** True Line Result
      state.game_over ||= state.light_meter <= 1
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if inputs.keyboard.key_down.r~
- Inside source: true
*** True Line Result
      if inputs.keyboard.key_down.r
** Processing line: ~        state.you_win = false~
- Inside source: true
*** True Line Result
        state.you_win = false
** Processing line: ~        state.game_over = true~
- Inside source: true
*** True Line Result
        state.game_over = true
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if state.game_over~
- Inside source: true
*** True Line Result
      if state.game_over
** Processing line: ~        state.you_win = false~
- Inside source: true
*** True Line Result
        state.you_win = false
** Processing line: ~        state.game_over = true~
- Inside source: true
*** True Line Result
        state.game_over = true
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if state.light_meter >= 6000~
- Inside source: true
*** True Line Result
      if state.light_meter >= 6000
** Processing line: ~        state.you_win = true~
- Inside source: true
*** True Line Result
        state.you_win = true
** Processing line: ~        state.game_over = true~
- Inside source: true
*** True Line Result
        state.game_over = true
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if state.game_over~
- Inside source: true
*** True Line Result
      if state.game_over
** Processing line: ~        state.game_over_render_queue.concat shadows.map { |s| s.sprite.merge(a: 255) }~
- Inside source: true
*** True Line Result
        state.game_over_render_queue.concat shadows.map { |s| s.sprite.merge(a: 255) }
** Processing line: ~        state.game_over_render_queue << player.sprite.merge(a: 255)~
- Inside source: true
*** True Line Result
        state.game_over_render_queue << player.sprite.merge(a: 255)
** Processing line: ~        state.game_over_render_queue << state.light_crystal.merge(a: 255, path: 'sprites/light.png', b: 128)~
- Inside source: true
*** True Line Result
        state.game_over_render_queue << state.light_crystal.merge(a: 255, path: 'sprites/light.png', b: 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 calc_clock~
- Inside source: true
*** True Line Result
    def calc_clock
** Processing line: ~      return if state.game_over~
- Inside source: true
*** True Line Result
      return if state.game_over
** Processing line: ~      state.clock += 1~
- Inside source: true
*** True Line Result
      state.clock += 1
** Processing line: ~      player.clock += 1~
- Inside source: true
*** True Line Result
      player.clock += 1
** Processing line: ~      shadows.each { |s| s.clock += 1 if entity_active? s }~
- Inside source: true
*** True Line Result
      shadows.each { |s| s.clock += 1 if entity_active? s }
** 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_light_meter~
- Inside source: true
*** True Line Result
      render_light_meter
** Processing line: ~      render_instructions~
- Inside source: true
*** True Line Result
      render_instructions
** Processing line: ~      render_render_queues~
- Inside source: true
*** True Line Result
      render_render_queues
** Processing line: ~      render_light_meter_warning~
- Inside source: true
*** True Line Result
      render_light_meter_warning
** Processing line: ~      render_light_crystal~
- Inside source: true
*** True Line Result
      render_light_crystal
** Processing line: ~      render_entities~
- Inside source: true
*** True Line Result
      render_entities
** 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: ~      outputs.background_color = [255, 255, 255]~
- Inside source: true
*** True Line Result
      outputs.background_color = [255, 255, 255]
** Processing line: ~      outputs.sprites << { x: 0,~
- Inside source: true
*** True Line Result
      outputs.sprites << { x: 0,
** Processing line: ~                           y: 0,~
- Inside source: true
*** True Line Result
                           y: 0,
** Processing line: ~                           w: 1280,~
- Inside source: true
*** True Line Result
                           w: 1280,
** Processing line: ~                           h: 720,~
- Inside source: true
*** True Line Result
                           h: 720,
** Processing line: ~                           path: "sprites/stage.png",~
- Inside source: true
*** True Line Result
                           path: "sprites/stage.png",
** Processing line: ~                           a: 200 }~
- Inside source: true
*** True Line Result
                           a: 200 }
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def render_light_meter~
- Inside source: true
*** True Line Result
    def render_light_meter
** Processing line: ~      meter_perc = state.light_meter.fdiv(6000) + (0.002 * rand)~
- Inside source: true
*** True Line Result
      meter_perc = state.light_meter.fdiv(6000) + (0.002 * rand)
** Processing line: ~      light_w = (1280 * meter_perc).round~
- Inside source: true
*** True Line Result
      light_w = (1280 * meter_perc).round
** Processing line: ~      dark_w  = 1280 - light_w~
- Inside source: true
*** True Line Result
      dark_w  = 1280 - light_w
** Processing line: ~      outputs.sprites << { x: 0,~
- Inside source: true
*** True Line Result
      outputs.sprites << { x: 0,
** Processing line: ~                           y: 64.from_top,~
- Inside source: true
*** True Line Result
                           y: 64.from_top,
** Processing line: ~                           w: light_w,~
- Inside source: true
*** True Line Result
                           w: light_w,
** 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: light_w,~
- Inside source: true
*** True Line Result
                           source_w: light_w,
** Processing line: ~                           source_h: 128,~
- Inside source: true
*** True Line Result
                           source_h: 128,
** Processing line: ~                           h: 64,~
- Inside source: true
*** True Line Result
                           h: 64,
** Processing line: ~                           path: 'sprites/meter-light.png' }~
- Inside source: true
*** True Line Result
                           path: 'sprites/meter-light.png' }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      outputs.sprites << { x: 1280 * meter_perc,~
- Inside source: true
*** True Line Result
      outputs.sprites << { x: 1280 * meter_perc,
** Processing line: ~                           y: 64.from_top,~
- Inside source: true
*** True Line Result
                           y: 64.from_top,
** Processing line: ~                           w: dark_w,~
- Inside source: true
*** True Line Result
                           w: dark_w,
** Processing line: ~                           source_x: light_w,~
- Inside source: true
*** True Line Result
                           source_x: light_w,
** Processing line: ~                           source_y: 0,~
- Inside source: true
*** True Line Result
                           source_y: 0,
** Processing line: ~                           source_w: dark_w,~
- Inside source: true
*** True Line Result
                           source_w: dark_w,
** Processing line: ~                           source_h: 128,~
- Inside source: true
*** True Line Result
                           source_h: 128,
** Processing line: ~                           h: 64,~
- Inside source: true
*** True Line Result
                           h: 64,
** Processing line: ~                           path: 'sprites/meter-dark.png' }~
- Inside source: true
*** True Line Result
                           path: 'sprites/meter-dark.png' }
** 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: ~      outputs.labels << { x: 640,~
- Inside source: true
*** True Line Result
      outputs.labels << { x: 640,
** Processing line: ~                          y: 40,~
- Inside source: true
*** True Line Result
                          y: 40,
** Processing line: ~                          text: '[left/right] to move, [up/space] to jump, [down] to drop through platform',~
- Inside source: true
*** True Line Result
                          text: '[left/right] to move, [up/space] to jump, [down] to drop through platform',
** 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 state.you_win~
- Inside source: true
*** True Line Result
      if state.you_win
** Processing line: ~        outputs.labels << { x: 640,~
- Inside source: true
*** True Line Result
        outputs.labels << { x: 640,
** Processing line: ~                            y: 40.from_top,~
- Inside source: true
*** True Line Result
                            y: 40.from_top,
** Processing line: ~                            text: 'You win!',~
- Inside source: true
*** True Line Result
                            text: 'You win!',
** Processing line: ~                            size_enum: -1,~
- Inside source: true
*** True Line Result
                            size_enum: -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: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def render_render_queues~
- Inside source: true
*** True Line Result
    def render_render_queues
** Processing line: ~      outputs.sprites << state.jitter_fade_out_render_queue~
- Inside source: true
*** True Line Result
      outputs.sprites << state.jitter_fade_out_render_queue
** Processing line: ~      outputs.sprites << state.game_over_render_queue~
- Inside source: true
*** True Line Result
      outputs.sprites << state.game_over_render_queue
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def render_light_meter_warning~
- Inside source: true
*** True Line Result
    def render_light_meter_warning
** Processing line: ~      return if state.light_meter >= 255~
- Inside source: true
*** True Line Result
      return if state.light_meter >= 255
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      outputs.primitives << { x: 0,~
- Inside source: true
*** True Line Result
      outputs.primitives << { x: 0,
** Processing line: ~                              y: 0,~
- Inside source: true
*** True Line Result
                              y: 0,
** Processing line: ~                              w: 1280,~
- Inside source: true
*** True Line Result
                              w: 1280,
** Processing line: ~                              h: 720,~
- Inside source: true
*** True Line Result
                              h: 720,
** Processing line: ~                              a: 255 - state.light_meter,~
- Inside source: true
*** True Line Result
                              a: 255 - state.light_meter,
** Processing line: ~                              path: :pixel,~
- Inside source: true
*** True Line Result
                              path: :pixel,
** 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: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      outputs.primitives << { x: state.light_crystal.x - 32,~
- Inside source: true
*** True Line Result
      outputs.primitives << { x: state.light_crystal.x - 32,
** Processing line: ~                              y: state.light_crystal.y - 32,~
- Inside source: true
*** True Line Result
                              y: state.light_crystal.y - 32,
** 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: ~                              a: 255 - state.light_meter,~
- Inside source: true
*** True Line Result
                              a: 255 - state.light_meter,
** Processing line: ~                              path: 'sprites/spotlight.png' }~
- Inside source: true
*** True Line Result
                              path: 'sprites/spotlight.png' }
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def render_light_crystal~
- Inside source: true
*** True Line Result
    def render_light_crystal
** Processing line: ~      jitter_sprite = { x: state.light_crystal.x + 5 * rand,~
- Inside source: true
*** True Line Result
      jitter_sprite = { x: state.light_crystal.x + 5 * rand,
** Processing line: ~                        y: state.light_crystal.y + 5 * rand,~
- Inside source: true
*** True Line Result
                        y: state.light_crystal.y + 5 * rand,
** Processing line: ~                        w: state.light_crystal.w + 5 * rand,~
- Inside source: true
*** True Line Result
                        w: state.light_crystal.w + 5 * rand,
** Processing line: ~                        h: state.light_crystal.h + 5 * rand,~
- Inside source: true
*** True Line Result
                        h: state.light_crystal.h + 5 * rand,
** Processing line: ~                        path: 'sprites/light.png' }~
- Inside source: true
*** True Line Result
                        path: 'sprites/light.png' }
** Processing line: ~      outputs.primitives << jitter_sprite~
- Inside source: true
*** True Line Result
      outputs.primitives << jitter_sprite
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def render_entities~
- Inside source: true
*** True Line Result
    def render_entities
** Processing line: ~      render_entity player, r: 0, g: 0, b: 0~
- Inside source: true
*** True Line Result
      render_entity player, r: 0, g: 0, b: 0
** Processing line: ~      shadows.each { |shadow| render_entity shadow, g: 0, b: 0 }~
- Inside source: true
*** True Line Result
      shadows.each { |shadow| render_entity shadow, g: 0, b: 0 }
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def render_entity entity, r: 255, g: 255, b: 255;~
- Inside source: true
*** True Line Result
    def render_entity entity, r: 255, g: 255, b: 255;
** Processing line: ~      a = 255~
- Inside source: true
*** True Line Result
      a = 255
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      entity.sprite = nil~
- Inside source: true
*** True Line Result
      entity.sprite = nil
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      if entity.activate_at~
- Inside source: true
*** True Line Result
      if entity.activate_at
** Processing line: ~        activation_elapsed_time = state.clock - entity.activate_at~
- Inside source: true
*** True Line Result
        activation_elapsed_time = state.clock - entity.activate_at
** Processing line: ~        if entity.activate_at > state.clock~
- Inside source: true
*** True Line Result
        if entity.activate_at > state.clock
** Processing line: ~          entity.sprite = { x: entity.initial_x + 5 * rand,~
- Inside source: true
*** True Line Result
          entity.sprite = { x: entity.initial_x + 5 * rand,
** Processing line: ~                            y: entity.initial_y + 5 * rand,~
- Inside source: true
*** True Line Result
                            y: entity.initial_y + 5 * rand,
** Processing line: ~                            w: 64 + 5 * rand,~
- Inside source: true
*** True Line Result
                            w: 64 + 5 * rand,
** Processing line: ~                            h: 64 + 5 * rand,~
- Inside source: true
*** True Line Result
                            h: 64 + 5 * rand,
** Processing line: ~                            path: "sprites/light.png",~
- Inside source: true
*** True Line Result
                            path: "sprites/light.png",
** Processing line: ~                            g: 0, b: 0,~
- Inside source: true
*** True Line Result
                            g: 0, b: 0,
** Processing line: ~                            a: a }~
- Inside source: true
*** True Line Result
                            a: a }
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~          outputs.sprites << entity.sprite~
- Inside source: true
*** True Line Result
          outputs.sprites << entity.sprite
** Processing line: ~          return~
- Inside source: true
*** True Line Result
          return
** Processing line: ~        elsif !entity.activated~
- Inside source: true
*** True Line Result
        elsif !entity.activated
** Processing line: ~          entity.activated = true~
- Inside source: true
*** True Line Result
          entity.activated = true
** Processing line: ~          state.jitter_fade_out_render_queue << { x: entity.initial_x + 5 * rand,~
- Inside source: true
*** True Line Result
          state.jitter_fade_out_render_queue << { x: entity.initial_x + 5 * rand,
** Processing line: ~                                                  y: entity.initial_y + 5 * rand,~
- Inside source: true
*** True Line Result
                                                  y: entity.initial_y + 5 * rand,
** Processing line: ~                                                  w: 86 + 5 * rand, h: 86 + 5 * rand,~
- Inside source: true
*** True Line Result
                                                  w: 86 + 5 * rand, h: 86 + 5 * rand,
** Processing line: ~                                                  path: "sprites/light.png",~
- Inside source: true
*** True Line Result
                                                  path: "sprites/light.png",
** Processing line: ~                                                  g: 0, b: 0, a: 255 }~
- Inside source: true
*** True Line Result
                                                  g: 0, b: 0, a: 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: ~      if entity.action == :standing~
- Inside source: true
*** True Line Result
      if entity.action == :standing
** Processing line: ~        path = "sprites/player/stand.png"~
- Inside source: true
*** True Line Result
        path = "sprites/player/stand.png"
** Processing line: ~      elsif entity.action == :running~
- Inside source: true
*** True Line Result
      elsif entity.action == :running
** Processing line: ~        sprint_index = entity.action_at~
- Inside source: true
*** True Line Result
        sprint_index = entity.action_at
** Processing line: ~                             .frame_index count: 4,~
- Inside source: true
*** True Line Result
                             .frame_index count: 4,
** Processing line: ~                                          hold_for: 8,~
- Inside source: true
*** True Line Result
                                          hold_for: 8,
** Processing line: ~                                          repeat: true,~
- Inside source: true
*** True Line Result
                                          repeat: true,
** Processing line: ~                                          tick_count_override: entity.clock~
- Inside source: true
*** True Line Result
                                          tick_count_override: entity.clock
** Processing line: ~        path = "sprites/player/run-#{sprint_index}.png"~
- Inside source: true
*** True Line Result
        path = "sprites/player/run-#{sprint_index}.png"
** Processing line: ~      elsif entity.action == :first_jump~
- Inside source: true
*** True Line Result
      elsif entity.action == :first_jump
** Processing line: ~        sprint_index = entity.action_at~
- Inside source: true
*** True Line Result
        sprint_index = entity.action_at
** Processing line: ~                             .frame_index count: 2,~
- Inside source: true
*** True Line Result
                             .frame_index count: 2,
** Processing line: ~                                          hold_for: 8,~
- Inside source: true
*** True Line Result
                                          hold_for: 8,
** Processing line: ~                                          repeat: false,~
- Inside source: true
*** True Line Result
                                          repeat: false,
** Processing line: ~                                          tick_count_override: entity.clock~
- Inside source: true
*** True Line Result
                                          tick_count_override: entity.clock
** Processing line: ~        path = "sprites/player/jump-#{sprint_index || 1}.png"~
- Inside source: true
*** True Line Result
        path = "sprites/player/jump-#{sprint_index || 1}.png"
** Processing line: ~      elsif entity.action == :midair_jump~
- Inside source: true
*** True Line Result
      elsif entity.action == :midair_jump
** Processing line: ~        sprint_index = entity.action_at~
- Inside source: true
*** True Line Result
        sprint_index = entity.action_at
** Processing line: ~                             .frame_index count: state.midair_jump_frame_count,~
- Inside source: true
*** True Line Result
                             .frame_index count: state.midair_jump_frame_count,
** Processing line: ~                                          hold_for: state.midair_jump_hold_for,~
- Inside source: true
*** True Line Result
                                          hold_for: state.midair_jump_hold_for,
** Processing line: ~                                          repeat: false,~
- Inside source: true
*** True Line Result
                                          repeat: false,
** Processing line: ~                                          tick_count_override: entity.clock~
- Inside source: true
*** True Line Result
                                          tick_count_override: entity.clock
** Processing line: ~        path = "sprites/player/midair-jump-#{sprint_index || 8}.png"~
- Inside source: true
*** True Line Result
        path = "sprites/player/midair-jump-#{sprint_index || 8}.png"
** Processing line: ~      elsif entity.action == :falling~
- Inside source: true
*** True Line Result
      elsif entity.action == :falling
** Processing line: ~        path = "sprites/player/falling.png"~
- Inside source: true
*** True Line Result
        path = "sprites/player/falling.png"
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      flip_horizontally = true if entity.orientation == :left~
- Inside source: true
*** True Line Result
      flip_horizontally = true if entity.orientation == :left
** Processing line: ~      entity.sprite = entity.render_rect.merge path: path,~
- Inside source: true
*** True Line Result
      entity.sprite = entity.render_rect.merge path: path,
** Processing line: ~                                               a: a,~
- Inside source: true
*** True Line Result
                                               a: a,
** 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: ~                                               flip_horizontally: flip_horizontally~
- Inside source: true
*** True Line Result
                                               flip_horizontally: flip_horizontally
** Processing line: ~      outputs.sprites << entity.sprite~
- Inside source: true
*** True Line Result
      outputs.sprites << entity.sprite
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def new_game~
- Inside source: true
*** True Line Result
    def new_game
** Processing line: ~      state.clock                   = 0~
- Inside source: true
*** True Line Result
      state.clock                   = 0
** Processing line: ~      state.game_over               = false~
- Inside source: true
*** True Line Result
      state.game_over               = false
** 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: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.activation_time         = 90~
- Inside source: true
*** True Line Result
      state.activation_time         = 90
** Processing line: ~      state.light_meter             = 600~
- Inside source: true
*** True Line Result
      state.light_meter             = 600
** Processing line: ~      state.light_meter_queue       = 0~
- Inside source: true
*** True Line Result
      state.light_meter_queue       = 0
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.midair_jump_frame_count = 9~
- Inside source: true
*** True Line Result
      state.midair_jump_frame_count = 9
** Processing line: ~      state.midair_jump_hold_for    = 6~
- Inside source: true
*** True Line Result
      state.midair_jump_hold_for    = 6
** Processing line: ~      state.midair_jump_duration    = state.midair_jump_frame_count * state.midair_jump_hold_for~
- Inside source: true
*** True Line Result
      state.midair_jump_duration    = state.midair_jump_frame_count * state.midair_jump_hold_for
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.tiles                   = [~
- Inside source: true
*** True Line Result
      state.tiles                   = [
** Processing line: ~        { impassable: true, x: 0, y: 0, w: 1280, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
- Inside source: true
*** True Line Result
        { impassable: true, x: 0, y: 0, w: 1280, h: 8, path: :pixel, r: 0, g: 0, b: 0 },
** Processing line: ~        { impassable: true, x: 0, y: 0, w: 8, h: 1500, path: :pixel, r: 0, g: 0, b: 0 },~
- Inside source: true
*** True Line Result
        { impassable: true, x: 0, y: 0, w: 8, h: 1500, path: :pixel, r: 0, g: 0, b: 0 },
** Processing line: ~        { impassable: true, x: 1280 - 8, y: 0, w: 8, h: 1500, path: :pixel, r: 0, g: 0, b: 0 },~
- Inside source: true
*** True Line Result
        { impassable: true, x: 1280 - 8, y: 0, w: 8, h: 1500, path: :pixel, r: 0, g: 0, b: 0 },
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        { x: 80 + 320 + 80,            y: 128, w: 320, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
- Inside source: true
*** True Line Result
        { x: 80 + 320 + 80,            y: 128, w: 320, h: 8, path: :pixel, r: 0, g: 0, b: 0 },
** Processing line: ~        { x: 80 + 320 + 80 + 320 + 80, y: 192, w: 320, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
- Inside source: true
*** True Line Result
        { x: 80 + 320 + 80 + 320 + 80, y: 192, w: 320, h: 8, path: :pixel, r: 0, g: 0, b: 0 },
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        { x: 160,                      y: 320, w: 400, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
- Inside source: true
*** True Line Result
        { x: 160,                      y: 320, w: 400, h: 8, path: :pixel, r: 0, g: 0, b: 0 },
** Processing line: ~        { x: 160 + 400 + 160,          y: 400, w: 400, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
- Inside source: true
*** True Line Result
        { x: 160 + 400 + 160,          y: 400, w: 400, h: 8, path: :pixel, r: 0, g: 0, b: 0 },
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        { x: 320,                      y: 600, w: 320, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
- Inside source: true
*** True Line Result
        { x: 320,                      y: 600, w: 320, h: 8, path: :pixel, r: 0, g: 0, b: 0 },
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        { x: 8, y: 500, w: 100, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
- Inside source: true
*** True Line Result
        { x: 8, y: 500, w: 100, h: 8, path: :pixel, r: 0, g: 0, b: 0 },
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        { x: 8, y: 60, w: 100, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
- Inside source: true
*** True Line Result
        { x: 8, y: 60, w: 100, h: 8, path: :pixel, r: 0, g: 0, b: 0 },
** Processing line: ~      ]~
- Inside source: true
*** True Line Result
      ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.player                = new_entity~
- Inside source: true
*** True Line Result
      state.player                = new_entity
** Processing line: ~      state.player.jump_count     = 1~
- Inside source: true
*** True Line Result
      state.player.jump_count     = 1
** Processing line: ~      state.player.jumped_at      = state.player.clock~
- Inside source: true
*** True Line Result
      state.player.jumped_at      = state.player.clock
** Processing line: ~      state.player.jumped_down_at = 0~
- Inside source: true
*** True Line Result
      state.player.jumped_down_at = 0
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.shadows   = []~
- Inside source: true
*** True Line Result
      state.shadows   = []
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.input_timeline = [~
- Inside source: true
*** True Line Result
      state.input_timeline = [
** Processing line: ~        { at: 0, k: :left_right, v: inputs.left_right },~
- Inside source: true
*** True Line Result
        { at: 0, k: :left_right, v: inputs.left_right },
** Processing line: ~        { at: 0, k: :space,      v: false },~
- Inside source: true
*** True Line Result
        { at: 0, k: :space,      v: false },
** Processing line: ~        { at: 0, k: :down,       v: false },~
- Inside source: true
*** True Line Result
        { at: 0, k: :down,       v: false },
** Processing line: ~      ]~
- Inside source: true
*** True Line Result
      ]
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.jitter_fade_out_render_queue   = []~
- Inside source: true
*** True Line Result
      state.jitter_fade_out_render_queue   = []
** Processing line: ~      state.game_over_render_queue       ||= []~
- Inside source: true
*** True Line Result
      state.game_over_render_queue       ||= []
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      state.light_crystal = new_light_crystal~
- Inside source: true
*** True Line Result
      state.light_crystal = new_light_crystal
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def new_light_crystal~
- Inside source: true
*** True Line Result
    def new_light_crystal
** Processing line: ~      r = { x: 124 + rand(1000), y: 135 + rand(500), w: 64, h: 64 }~
- Inside source: true
*** True Line Result
      r = { x: 124 + rand(1000), y: 135 + rand(500), w: 64, h: 64 }
** Processing line: ~      return new_light_crystal if tiles.any? { |t| t.intersect_rect? r }~
- Inside source: true
*** True Line Result
      return new_light_crystal if tiles.any? { |t| t.intersect_rect? r }
** Processing line: ~      return new_light_crystal if (player.x - r.x).abs < 200~
- Inside source: true
*** True Line Result
      return new_light_crystal if (player.x - r.x).abs < 200
** 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 entity_active? entity~
- Inside source: true
*** True Line Result
    def entity_active? entity
** Processing line: ~      return true unless entity.activate_at~
- Inside source: true
*** True Line Result
      return true unless entity.activate_at
** Processing line: ~      return entity.activate_at <= state.clock~
- Inside source: true
*** True Line Result
      return entity.activate_at <= state.clock
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def add_shadow!~
- Inside source: true
*** True Line Result
    def add_shadow!
** Processing line: ~      s = new_entity(from_entity: player)~
- Inside source: true
*** True Line Result
      s = new_entity(from_entity: player)
** Processing line: ~      s.activate_at = state.clock + state.activation_time * (shadows.length + 1)~
- Inside source: true
*** True Line Result
      s.activate_at = state.clock + state.activation_time * (shadows.length + 1)
** Processing line: ~      s.spawn_countdown = state.activation_time~
- Inside source: true
*** True Line Result
      s.spawn_countdown = state.activation_time
** Processing line: ~      shadows << s~
- Inside source: true
*** True Line Result
      shadows << s
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def find_input_timeline at:, key:;~
- Inside source: true
*** True Line Result
    def find_input_timeline at:, key:;
** Processing line: ~      state.input_timeline.find { |t| t.at <= at && t.k == key }.v~
- Inside source: true
*** True Line Result
      state.input_timeline.find { |t| t.at <= at && t.k == key }.v
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def new_entity from_entity: nil~
- Inside source: true
*** True Line Result
    def new_entity from_entity: nil
** Processing line: ~      pe = state.new_entity(:body)~
- Inside source: true
*** True Line Result
      pe = state.new_entity(:body)
** Processing line: ~      pe.w                  = 96~
- Inside source: true
*** True Line Result
      pe.w                  = 96
** Processing line: ~      pe.h                  = 96~
- Inside source: true
*** True Line Result
      pe.h                  = 96
** Processing line: ~      pe.jump_power         = 12~
- Inside source: true
*** True Line Result
      pe.jump_power         = 12
** Processing line: ~      pe.y                  = 500~
- Inside source: true
*** True Line Result
      pe.y                  = 500
** Processing line: ~      pe.x                  = 640 - 8~
- Inside source: true
*** True Line Result
      pe.x                  = 640 - 8
** Processing line: ~      pe.initial_x          = pe.x~
- Inside source: true
*** True Line Result
      pe.initial_x          = pe.x
** Processing line: ~      pe.initial_y          = pe.y~
- Inside source: true
*** True Line Result
      pe.initial_y          = pe.y
** Processing line: ~      pe.dy                 = 0~
- Inside source: true
*** True Line Result
      pe.dy                 = 0
** Processing line: ~      pe.dx                 = 0~
- Inside source: true
*** True Line Result
      pe.dx                 = 0
** Processing line: ~      pe.jumped_down_at     = 0~
- Inside source: true
*** True Line Result
      pe.jumped_down_at     = 0
** Processing line: ~      pe.jumped_at          = 0~
- Inside source: true
*** True Line Result
      pe.jumped_at          = 0
** Processing line: ~      pe.jump_count         = 0~
- Inside source: true
*** True Line Result
      pe.jump_count         = 0
** Processing line: ~      pe.clock              = state.clock~
- Inside source: true
*** True Line Result
      pe.clock              = state.clock
** Processing line: ~      pe.orientation        = :right~
- Inside source: true
*** True Line Result
      pe.orientation        = :right
** Processing line: ~      pe.action             = :falling~
- Inside source: true
*** True Line Result
      pe.action             = :falling
** Processing line: ~      pe.action_at          = state.clock~
- Inside source: true
*** True Line Result
      pe.action_at          = state.clock
** Processing line: ~      pe.left_right         = 0~
- Inside source: true
*** True Line Result
      pe.left_right         = 0
** Processing line: ~      if from_entity~
- Inside source: true
*** True Line Result
      if from_entity
** Processing line: ~        pe.w              = from_entity.w~
- Inside source: true
*** True Line Result
        pe.w              = from_entity.w
** Processing line: ~        pe.h              = from_entity.h~
- Inside source: true
*** True Line Result
        pe.h              = from_entity.h
** Processing line: ~        pe.jump_power     = from_entity.jump_power~
- Inside source: true
*** True Line Result
        pe.jump_power     = from_entity.jump_power
** Processing line: ~        pe.x              = from_entity.x~
- Inside source: true
*** True Line Result
        pe.x              = from_entity.x
** Processing line: ~        pe.y              = from_entity.y~
- Inside source: true
*** True Line Result
        pe.y              = from_entity.y
** Processing line: ~        pe.initial_x      = from_entity.x~
- Inside source: true
*** True Line Result
        pe.initial_x      = from_entity.x
** Processing line: ~        pe.initial_y      = from_entity.y~
- Inside source: true
*** True Line Result
        pe.initial_y      = from_entity.y
** Processing line: ~        pe.dy             = from_entity.dy~
- Inside source: true
*** True Line Result
        pe.dy             = from_entity.dy
** Processing line: ~        pe.dx             = from_entity.dx~
- Inside source: true
*** True Line Result
        pe.dx             = from_entity.dx
** Processing line: ~        pe.jumped_down_at = from_entity.jumped_down_at~
- Inside source: true
*** True Line Result
        pe.jumped_down_at = from_entity.jumped_down_at
** Processing line: ~        pe.jumped_at      = from_entity.jumped_at~
- Inside source: true
*** True Line Result
        pe.jumped_at      = from_entity.jumped_at
** Processing line: ~        pe.orientation    = from_entity.orientation~
- Inside source: true
*** True Line Result
        pe.orientation    = from_entity.orientation
** Processing line: ~        pe.action         = from_entity.action~
- Inside source: true
*** True Line Result
        pe.action         = from_entity.action
** Processing line: ~        pe.action_at      = from_entity.action_at~
- Inside source: true
*** True Line Result
        pe.action_at      = from_entity.action_at
** Processing line: ~        pe.jump_count     = from_entity.jump_count~
- Inside source: true
*** True Line Result
        pe.jump_count     = from_entity.jump_count
** Processing line: ~        pe.left_right     = from_entity.left_right~
- Inside source: true
*** True Line Result
        pe.left_right     = from_entity.left_right
** Processing line: ~      end~
- Inside source: true
*** True Line Result
      end
** Processing line: ~      pe~
- Inside source: true
*** True Line Result
      pe
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def entity_on_platform? entity~
- Inside source: true
*** True Line Result
    def entity_on_platform? entity
** Processing line: ~      entity.action == :standing || entity.action == :running~
- Inside source: true
*** True Line Result
      entity.action == :standing || entity.action == :running
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def entity_action_complete? entity, action_duration~
- Inside source: true
*** True Line Result
    def entity_action_complete? entity, action_duration
** Processing line: ~      entity.action_at.elapsed_time(entity.clock) + 1 >= action_duration~
- Inside source: true
*** True Line Result
      entity.action_at.elapsed_time(entity.clock) + 1 >= action_duration
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def entity_set_action! entity, action~
- Inside source: true
*** True Line Result
    def entity_set_action! entity, action
** Processing line: ~      entity.action = action~
- Inside source: true
*** True Line Result
      entity.action = action
** Processing line: ~      entity.action_at = entity.clock~
- Inside source: true
*** True Line Result
      entity.action_at = entity.clock
** Processing line: ~      entity.last_standing_at = entity.clock if action == :standing~
- Inside source: true
*** True Line Result
      entity.last_standing_at = entity.clock if action == :standing
** 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 shadows~
- Inside source: true
*** True Line Result
    def shadows
** Processing line: ~      state.shadows~
- Inside source: true
*** True Line Result
      state.shadows
** 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_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_collision tiles, target~
- Inside source: true
*** True Line Result
    def find_collision 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: ~  end~
- Inside source: true
*** True Line Result
  end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~  def boot args~
- Inside source: true
*** True Line Result
  def boot args
** Processing line: ~    $game = Game.new~
- Inside source: true
*** True Line Result
    $game = Game.new
** 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.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 args~
- Inside source: true
*** True Line Result
  def reset args
** Processing line: ~    $game = Game.new~
- Inside source: true
*** True Line Result
    $game = Game.new
** 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 - Shadows - Metadata - ios_metadata.txt~
- Header detected.
*** True Line Result

*** True Line Result
*** Platformer - Shadows - Metadata - ios_metadata.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/shadows/metadata/ios_metadata.txt~
- Inside source: true
*** True Line Result
  # ./samples/99_genre_platformer/shadows/metadata/ios_metadata.txt
** Processing line: ~  teamid=L7H57V9CRD~
- Inside source: true
*** True Line Result
  teamid=L7H57V9CRD
** Processing line: ~  appid=com.scratchworkdevelopment.sandbox~
- Inside source: true
*** True Line Result
  appid=com.scratchworkdevelopment.sandbox
** Processing line: ~  appname=DragonRuby~
- Inside source: true
*** True Line Result
  appname=DragonRuby
** Processing line: ~  version=1.0~
- Inside source: true
*** True Line Result
  version=1.0
** Processing line: ~  devcert=iPhone Developer: Amirali Rajan (P2B6225J87)~
- Inside source: true
*** True Line Result
  devcert=iPhone Developer: Amirali Rajan (P2B6225J87)
** Processing line: ~  prodcert=~
- Inside source: true
*** True Line Result
  prodcert=
** 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: ~*** Simulation - Sand Simulation - main.rb~
- Header detected.
*** True Line Result

*** True Line Result
*** Simulation - Sand Simulation - 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_simulation/sand_simulation/app/main.rb~
- Inside source: true
*** True Line Result
  # ./samples/99_genre_simulation/sand_simulation/app/main.rb
** Processing line: ~  class Elements~
- Inside source: true
*** True Line Result
  class Elements
** Processing line: ~    def initialize size~
- Inside source: true
*** True Line Result
    def initialize size
** Processing line: ~      @size = size~
- Inside source: true
*** True Line Result
      @size = size
** Processing line: ~      @max_x_ordinal = 1280.idiv size~
- Inside source: true
*** True Line Result
      @max_x_ordinal = 1280.idiv size
** Processing line: ~      @element_lookup = {}~
- Inside source: true
*** True Line Result
      @element_lookup = {}
** Processing line: ~      @elements = []~
- Inside source: true
*** True Line Result
      @elements = []
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def add_element x_ordinal, y_ordinal~
- Inside source: true
*** True Line Result
    def add_element x_ordinal, y_ordinal
** Processing line: ~      return nil if @element_lookup.dig x_ordinal, y_ordinal~
- Inside source: true
*** True Line Result
      return nil if @element_lookup.dig x_ordinal, y_ordinal
** Processing line: ~      element = Element.new x_ordinal, y_ordinal, @size~
- Inside source: true
*** True Line Result
      element = Element.new x_ordinal, y_ordinal, @size
** Processing line: ~      @elements << element~
- Inside source: true
*** True Line Result
      @elements << element
** Processing line: ~      rehash_elements~
- Inside source: true
*** True Line Result
      rehash_elements
** Processing line: ~      element~
- Inside source: true
*** True Line Result
      element
** 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: ~      fn.each_send @elements, self, :move_element~
- Inside source: true
*** True Line Result
      fn.each_send @elements, self, :move_element
** Processing line: ~      rehash_elements~
- Inside source: true
*** True Line Result
      rehash_elements
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def move_element element~
- Inside source: true
*** True Line Result
    def move_element element
** Processing line: ~      if below_empty?(element) && element.y_ordinal != 0~
- Inside source: true
*** True Line Result
      if below_empty?(element) && element.y_ordinal != 0
** Processing line: ~        element.move  0, -1~
- Inside source: true
*** True Line Result
        element.move  0, -1
** Processing line: ~      elsif below_left_empty?(element) && element.y_ordinal != 0 && element.x_ordinal != 0~
- Inside source: true
*** True Line Result
      elsif below_left_empty?(element) && element.y_ordinal != 0 && element.x_ordinal != 0
** Processing line: ~        element.move -1, -1~
- Inside source: true
*** True Line Result
        element.move -1, -1
** Processing line: ~      elsif below_right_empty?(element) && element.y_ordinal != 0 && element.x_ordinal != @max_x_ordinal~
- Inside source: true
*** True Line Result
      elsif below_right_empty?(element) && element.y_ordinal != 0 && element.x_ordinal != @max_x_ordinal
** Processing line: ~        element.move  1, -1~
- Inside source: true
*** True Line Result
        element.move  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: ~    def element_count~
- Inside source: true
*** True Line Result
    def element_count
** Processing line: ~      @elements.length~
- Inside source: true
*** True Line Result
      @elements.length
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def rehash_elements~
- Inside source: true
*** True Line Result
    def rehash_elements
** Processing line: ~      @element_lookup.clear~
- Inside source: true
*** True Line Result
      @element_lookup.clear
** Processing line: ~      fn.each_send @elements, self, :rehash_element~
- Inside source: true
*** True Line Result
      fn.each_send @elements, self, :rehash_element
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def rehash_element element~
- Inside source: true
*** True Line Result
    def rehash_element element
** Processing line: ~      @element_lookup[element.x_ordinal] ||= {}~
- Inside source: true
*** True Line Result
      @element_lookup[element.x_ordinal] ||= {}
** Processing line: ~      @element_lookup[element.x_ordinal][element.y_ordinal] = element~
- Inside source: true
*** True Line Result
      @element_lookup[element.x_ordinal][element.y_ordinal] = element
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def below_empty? e~
- Inside source: true
*** True Line Result
    def below_empty? e
** Processing line: ~      return false if e.y_ordinal == 0~
- Inside source: true
*** True Line Result
      return false if e.y_ordinal == 0
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal]~
- Inside source: true
*** True Line Result
      return true  if !@element_lookup[e.x_ordinal]
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal][e.y_ordinal - 1]~
- Inside source: true
*** True Line Result
      return true  if !@element_lookup[e.x_ordinal][e.y_ordinal - 1]
** Processing line: ~      return false if  @element_lookup[e.x_ordinal][e.y_ordinal - 1]~
- Inside source: true
*** True Line Result
      return false if  @element_lookup[e.x_ordinal][e.y_ordinal - 1]
** 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 below_left_empty? e~
- Inside source: true
*** True Line Result
    def below_left_empty? e
** Processing line: ~      return false if e.y_ordinal == 0~
- Inside source: true
*** True Line Result
      return false if e.y_ordinal == 0
** Processing line: ~      return false if e.x_ordinal == 0~
- Inside source: true
*** True Line Result
      return false if e.x_ordinal == 0
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal - 1]~
- Inside source: true
*** True Line Result
      return true  if !@element_lookup[e.x_ordinal - 1]
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal - 1][e.y_ordinal - 1]~
- Inside source: true
*** True Line Result
      return true  if !@element_lookup[e.x_ordinal - 1][e.y_ordinal - 1]
** Processing line: ~      return false if  @element_lookup[e.x_ordinal - 1][e.y_ordinal - 1]~
- Inside source: true
*** True Line Result
      return false if  @element_lookup[e.x_ordinal - 1][e.y_ordinal - 1]
** 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 below_right_empty? e~
- Inside source: true
*** True Line Result
    def below_right_empty? e
** Processing line: ~      return false if e.y_ordinal == 0~
- Inside source: true
*** True Line Result
      return false if e.y_ordinal == 0
** Processing line: ~      return false if e.x_ordinal == 256~
- Inside source: true
*** True Line Result
      return false if e.x_ordinal == 256
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal + 1]~
- Inside source: true
*** True Line Result
      return true  if !@element_lookup[e.x_ordinal + 1]
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal + 1][e.y_ordinal - 1]~
- Inside source: true
*** True Line Result
      return true  if !@element_lookup[e.x_ordinal + 1][e.y_ordinal - 1]
** Processing line: ~      return false if  @element_lookup[e.x_ordinal + 1][e.y_ordinal - 1]~
- Inside source: true
*** True Line Result
      return false if  @element_lookup[e.x_ordinal + 1][e.y_ordinal - 1]
** 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: ~~
- Inside source: true
*** True Line Result

** Processing line: ~  class Element~
- Inside source: true
*** True Line Result
  class Element
** Processing line: ~    attr_sprite~
- Inside source: true
*** True Line Result
    attr_sprite
** Processing line: ~    attr :x_ordinal, :y_ordinal~
- Inside source: true
*** True Line Result
    attr :x_ordinal, :y_ordinal
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def initialize x_ordinal, y_ordinal, s~
- Inside source: true
*** True Line Result
    def initialize x_ordinal, y_ordinal, s
** Processing line: ~      @x_ordinal     = x_ordinal~
- Inside source: true
*** True Line Result
      @x_ordinal     = x_ordinal
** Processing line: ~      @y_ordinal     = y_ordinal~
- Inside source: true
*** True Line Result
      @y_ordinal     = y_ordinal
** Processing line: ~      @s             = s~
- Inside source: true
*** True Line Result
      @s             = s
** Processing line: ~      @x             = x_ordinal * s~
- Inside source: true
*** True Line Result
      @x             = x_ordinal * s
** Processing line: ~      @y             = y_ordinal * s~
- Inside source: true
*** True Line Result
      @y             = y_ordinal * s
** Processing line: ~      @w             = s~
- Inside source: true
*** True Line Result
      @w             = s
** Processing line: ~      @h             = s~
- Inside source: true
*** True Line Result
      @h             = s
** Processing line: ~      @path          = "sprites/sand-element.png"~
- Inside source: true
*** True Line Result
      @path          = "sprites/sand-element.png"
** 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_sprite @x, @y, @w, @h, @path~
- Inside source: true
*** True Line Result
      ffi.draw_sprite @x, @y, @w, @h, @path
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def move dx, dy~
- Inside source: true
*** True Line Result
    def move dx, dy
** Processing line: ~      @y_ordinal += dy~
- Inside source: true
*** True Line Result
      @y_ordinal += dy
** Processing line: ~      @x_ordinal += dx~
- Inside source: true
*** True Line Result
      @x_ordinal += dx
** Processing line: ~      @y = @y_ordinal * @s~
- Inside source: true
*** True Line Result
      @y = @y_ordinal * @s
** Processing line: ~      @x = @x_ordinal * @s~
- Inside source: true
*** True Line Result
      @x = @x_ordinal * @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.state.size        ||= 10~
- Inside source: true
*** True Line Result
    args.state.size        ||= 10
** Processing line: ~    args.state.mouse_state ||= :up~
- Inside source: true
*** True Line Result
    args.state.mouse_state ||= :up
** Processing line: ~    @elements              ||= Elements.new args.state.size~
- Inside source: true
*** True Line Result
    @elements              ||= Elements.new args.state.size
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    if args.inputs.mouse.down~
- Inside source: true
*** True Line Result
    if args.inputs.mouse.down
** Processing line: ~      args.state.mouse_state = :held~
- Inside source: true
*** True Line Result
      args.state.mouse_state = :held
** Processing line: ~    elsif args.inputs.mouse.up~
- Inside source: true
*** True Line Result
    elsif args.inputs.mouse.up
** Processing line: ~      args.state.mouse_state = :released~
- Inside source: true
*** True Line Result
      args.state.mouse_state = :released
** 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~
- Inside source: true
*** True Line Result
    if args.state.mouse_state == :held
** Processing line: ~      added = @elements.add_element args.inputs.mouse.x.idiv(args.state.size), args.inputs.mouse.y.idiv(args.state.size)~
- Inside source: true
*** True Line Result
      added = @elements.add_element args.inputs.mouse.x.idiv(args.state.size), args.inputs.mouse.y.idiv(args.state.size)
** Processing line: ~      args.outputs.static_sprites << added if added~
- Inside source: true
*** True Line Result
      args.outputs.static_sprites << added if added
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    @elements.tick~
- Inside source: true
*** True Line Result
    @elements.tick
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    args.outputs.labels << { x: 30, y: 30.from_top, text: "#{args.gtk.current_framerate.to_sf}" }~
- Inside source: true
*** True Line Result
    args.outputs.labels << { x: 30, y: 30.from_top, text: "#{args.gtk.current_framerate.to_sf}" }
** Processing line: ~    args.outputs.labels << { x: 30, y: 60.from_top, text: "#{@elements.element_count}" }~
- Inside source: true
*** True Line Result
    args.outputs.labels << { x: 30, y: 60.from_top, text: "#{@elements.element_count}" }
** 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: ~  @elements = nil~
- Inside source: true
*** True Line Result
  @elements = 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: ~*** 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: ~** 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: ~  <html>~
- Inside source: true
*** True Line Result
  <html>
** Processing line: ~    <head>~
- Inside source: true
*** True Line Result
    <head>
** Processing line: ~      <meta charset="UTF-8"/>~
- Inside source: true
*** True Line Result
      <meta charset="UTF-8"/>
** Processing line: ~      <title>DragonRuby Game Toolkit Documentation</title>~
- Inside source: true
*** True Line Result
      <title>DragonRuby Game Toolkit Documentation</title>
** Processing line: ~      <style>~
- Inside source: true
*** True Line Result
      <style>
** Processing line: ~      pre {~
- Inside source: true
*** True Line Result
      pre {
** Processing line: ~        border: solid 1px silver;~
- Inside source: true
*** True Line Result
        border: solid 1px silver;
** Processing line: ~        padding: 10px;~
- Inside source: true
*** True Line Result
        padding: 10px;
** Processing line: ~        font-size: 14px;~
- Inside source: true
*** True Line Result
        font-size: 14px;
** Processing line: ~        white-space: pre-wrap;~
- Inside source: true
*** True Line Result
        white-space: pre-wrap;
** Processing line: ~        white-space: -moz-pre-wrap;~
- Inside source: true
*** True Line Result
        white-space: -moz-pre-wrap;
** Processing line: ~        white-space: -pre-wrap;~
- Inside source: true
*** True Line Result
        white-space: -pre-wrap;
** Processing line: ~        white-space: -o-pre-wrap;~
- Inside source: true
*** True Line Result
        white-space: -o-pre-wrap;
** Processing line: ~        word-wrap: break-word;~
- Inside source: true
*** True Line Result
        word-wrap: break-word;
** Processing line: ~      }~
- Inside source: true
*** True Line Result
      }
** Processing line: ~      </style>~
- Inside source: true
*** True Line Result
      </style>
** Processing line: ~    </head>~
- Inside source: true
*** True Line Result
    </head>
** Processing line: ~    <body>~
- Inside source: true
*** True Line Result
    <body>
** Processing line: ~        <script>~
- Inside source: true
*** True Line Result
        <script>
** Processing line: ~          async function submitForm() {~
- Inside source: true
*** True Line Result
          async function submitForm() {
** Processing line: ~            const result = await fetch("/dragon/autocomplete/", {~
- Inside source: true
*** True Line Result
            const result = await fetch("/dragon/autocomplete/", {
** Processing line: ~              method: 'POST',~
- Inside source: true
*** True Line Result
              method: 'POST',
** Processing line: ~              headers: { 'Content-Type': 'application/json' },~
- Inside source: true
*** True Line Result
              headers: { 'Content-Type': 'application/json' },
** Processing line: ~              body: JSON.stringify({ index: document.getElementById("index").value,~
- Inside source: true
*** True Line Result
              body: JSON.stringify({ index: document.getElementById("index").value,
** Processing line: ~                                     text: document.getElementById("text").value }),~
- Inside source: true
*** True Line Result
                                     text: document.getElementById("text").value }),
** Processing line: ~            });~
- Inside source: true
*** True Line Result
            });
** Processing line: ~            document.getElementById("autocomplete-results").innerHTML = await result.text();~
- Inside source: true
*** True Line Result
            document.getElementById("autocomplete-results").innerHTML = await result.text();
** Processing line: ~          }~
- Inside source: true
*** True Line Result
          }
** Processing line: ~        </script>~
- Inside source: true
*** True Line Result
        </script>
** Processing line: ~        <form>~
- Inside source: true
*** True Line Result
        <form>
** Processing line: ~          <div>index</div>~
- Inside source: true
*** True Line Result
          <div>index</div>
** Processing line: ~          <input name="index" id="index" type="text" value="27" />~
- Inside source: true
*** True Line Result
          <input name="index" id="index" type="text" value="27" />
** Processing line: ~          <div>code</div>~
- Inside source: true
*** True Line Result
          <div>code</div>
** Processing line: ~          <textarea name="text" id="text" rows="30" cols="80">def tick args~
- Inside source: true
*** True Line Result
          <textarea name="text" id="text" rows="30" cols="80">def tick args
** Processing line: ~    args.state.~
- Inside source: true
*** True Line Result
    args.state.
** Processing line: ~  end</textarea>~
- Inside source: true
*** True Line Result
  end</textarea>
** Processing line: ~          <br/>~
- Inside source: true
*** True Line Result
          <br/>
** Processing line: ~          <input type="button" value="Get Suggestions" onclick="submitForm();" />~
- Inside source: true
*** True Line Result
          <input type="button" value="Get Suggestions" onclick="submitForm();" />
** Processing line: ~          <span id="success-notification"></span>~
- Inside source: true
*** True Line Result
          <span id="success-notification"></span>
** Processing line: ~        </form>~
- Inside source: true
*** True Line Result
        </form>
** Processing line: ~        <pre id="autocomplete-results">~
- Inside source: true
*** True Line Result
        <pre id="autocomplete-results">
** Processing line: ~        </pre>~
- Inside source: true
*** True Line Result
        </pre>
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      #{links}~
- Inside source: true
*** True Line Result
      #{links}
** Processing line: ~    </body>~
- Inside source: true
*** True Line Result
    </body>
** Processing line: ~  </html>~
- Inside source: true
*** True Line Result
  </html>
** 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: ~      <ul>~
- Inside source: true
*** True Line Result
      <ul>
** Processing line: ~        <li><a href="/">Home</a></li>~
- Inside source: true
*** True Line Result
        <li><a href="/">Home</a></li>
** Processing line: ~        <li><a href="/docs.html">Docs</a></li>~
- Inside source: true
*** True Line Result
        <li><a href="/docs.html">Docs</a></li>
** Processing line: ~        <li><a href="/dragon/control_panel/">Control Panel</a></li>~
- Inside source: true
*** True Line Result
        <li><a href="/dragon/control_panel/">Control Panel</a></li>
** Processing line: ~        <li><a href="/dragon/eval/">Console</a></li>~
- Inside source: true
*** True Line Result
        <li><a href="/dragon/eval/">Console</a></li>
** Processing line: ~        <li><a href="/dragon/log/">Logs</a></li>~
- Inside source: true
*** True Line Result
        <li><a href="/dragon/log/">Logs</a></li>
** Processing line: ~        <li><a href="/dragon/puts/">Puts</a></li>~
- Inside source: true
*** True Line Result
        <li><a href="/dragon/puts/">Puts</a></li>
** Processing line: ~        <li><a href="/dragon/code/">Code</a></li>~
- Inside source: true
*** True Line Result
        <li><a href="/dragon/code/">Code</a></li>
** Processing line: ~      </ul>~
- Inside source: true
*** True Line Result
      </ul>
** 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: ~  <html>~
- Inside source: true
*** True Line Result
  <html>
** Processing line: ~    <head>~
- Inside source: true
*** True Line Result
    <head>
** Processing line: ~      <meta charset="UTF-8"/>~
- Inside source: true
*** True Line Result
      <meta charset="UTF-8"/>
** Processing line: ~      <title>DragonRuby Game Toolkit Documentation</title>~
- Inside source: true
*** True Line Result
      <title>DragonRuby Game Toolkit Documentation</title>
** Processing line: ~    </head>~
- Inside source: true
*** True Line Result
    </head>
** Processing line: ~    <body>~
- Inside source: true
*** True Line Result
    <body>
** Processing line: ~      #{links}~
- Inside source: true
*** True Line Result
      #{links}
** Processing line: ~    </body>~
- Inside source: true
*** True Line Result
    </body>
** Processing line: ~  </html>~
- Inside source: true
*** True Line Result
  </html>
** 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: ~          "<li><a href=\"/dragon/code/edit/?file=#{f}\">#{f}</a></li>"~
- Inside source: true
*** True Line Result
          "<li><a href=\"/dragon/code/edit/?file=#{f}\">#{f}</a></li>"
** Processing line: ~        end~
- Inside source: true
*** True Line Result
        end
** Processing line: ~        <<-S~
- Inside source: true
*** True Line Result
        <<-S
** Processing line: ~  <ul>~
- Inside source: true
*** True Line Result
  <ul>
** Processing line: ~    #{links.join("\n")}~
- Inside source: true
*** True Line Result
    #{links.join("\n")}
** Processing line: ~  </ul>~
- Inside source: true
*** True Line Result
  </ul>
** 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: ~  <html>~
- Inside source: true
*** True Line Result
  <html>
** Processing line: ~    <head>~
- Inside source: true
*** True Line Result
    <head>
** Processing line: ~      <meta charset="UTF-8"/>~
- Inside source: true
*** True Line Result
      <meta charset="UTF-8"/>
** Processing line: ~      <title>DragonRuby Game Toolkit Documentation</title>~
- Inside source: true
*** True Line Result
      <title>DragonRuby Game Toolkit Documentation</title>
** Processing line: ~    </head>~
- Inside source: true
*** True Line Result
    </head>
** Processing line: ~    <body>~
- Inside source: true
*** True Line Result
    <body>
** 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: ~    </body>~
- Inside source: true
*** True Line Result
    </body>
** Processing line: ~  </html>~
- Inside source: true
*** True Line Result
  </html>
** 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: ~  <html>~
- Inside source: true
*** True Line Result
  <html>
** Processing line: ~    <head>~
- Inside source: true
*** True Line Result
    <head>
** Processing line: ~      <meta charset="UTF-8"/>~
- Inside source: true
*** True Line Result
      <meta charset="UTF-8"/>
** Processing line: ~      <title>DragonRuby Game Toolkit Documentation</title>~
- Inside source: true
*** True Line Result
      <title>DragonRuby Game Toolkit Documentation</title>
** Processing line: ~    </head>~
- Inside source: true
*** True Line Result
    </head>
** Processing line: ~    <body>~
- Inside source: true
*** True Line Result
    <body>
** Processing line: ~        <script>~
- Inside source: true
*** True Line Result
        <script>
** Processing line: ~          async function submitForm() {~
- Inside source: true
*** True Line Result
          async function submitForm() {
** Processing line: ~            const result = await fetch("/dragon/code/update/?file=#{file}", {~
- Inside source: true
*** True Line Result
            const result = await fetch("/dragon/code/update/?file=#{file}", {
** Processing line: ~              method: 'POST',~
- Inside source: true
*** True Line Result
              method: 'POST',
** Processing line: ~              headers: { 'Content-Type': 'application/json' },~
- Inside source: true
*** True Line Result
              headers: { 'Content-Type': 'application/json' },
** Processing line: ~              body: JSON.stringify({ code: document.getElementById("code").value }),~
- Inside source: true
*** True Line Result
              body: JSON.stringify({ code: document.getElementById("code").value }),
** Processing line: ~            });~
- Inside source: true
*** True Line Result
            });
** Processing line: ~            document.getElementById("success-notification").innerHTML = "update successful";~
- Inside source: true
*** True Line Result
            document.getElementById("success-notification").innerHTML = "update successful";
** Processing line: ~            setTimeout(function() { document.getElementById("success-notification").innerHTML = ""; }, 3000);~
- Inside source: true
*** True Line Result
            setTimeout(function() { document.getElementById("success-notification").innerHTML = ""; }, 3000);
** Processing line: ~          }~
- Inside source: true
*** True Line Result
          }
** Processing line: ~        </script>~
- Inside source: true
*** True Line Result
        </script>
** Processing line: ~        <form>~
- Inside source: true
*** True Line Result
        <form>
** Processing line: ~          <div><code>#{file}:</code></div>~
- Inside source: true
*** True Line Result
          <div><code>#{file}:</code></div>
** Processing line: ~          <textarea name="code" id="code" rows="30" cols="80">#{args.gtk.read_file file}</textarea>~
- Inside source: true
*** True Line Result
          <textarea name="code" id="code" rows="30" cols="80">#{args.gtk.read_file file}</textarea>
** Processing line: ~          <br/>~
- Inside source: true
*** True Line Result
          <br/>
** Processing line: ~          <input type="button" value="Update" onclick="submitForm();" />~
- Inside source: true
*** True Line Result
          <input type="button" value="Update" onclick="submitForm();" />
** Processing line: ~          <span id="success-notification"></span>~
- Inside source: true
*** True Line Result
          <span id="success-notification"></span>
** Processing line: ~        </form>~
- Inside source: true
*** True Line Result
        </form>
** 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: ~    </body>~
- Inside source: true
*** True Line Result
    </body>
** Processing line: ~  </html>~
- Inside source: true
*** True Line Result
  </html>
** 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: ~  <html lang="en">~
- Inside source: true
*** True Line Result
  <html lang="en">
** Processing line: ~    <head><title>Eval</title></head>~
- Inside source: true
*** True Line Result
    <head><title>Eval</title></head>
** Processing line: ~    <style>~
- Inside source: true
*** True Line Result
    <style>
** Processing line: ~    pre {~
- Inside source: true
*** True Line Result
    pre {
** Processing line: ~      border: solid 1px silver;~
- Inside source: true
*** True Line Result
      border: solid 1px silver;
** Processing line: ~      padding: 10px;~
- Inside source: true
*** True Line Result
      padding: 10px;
** Processing line: ~      font-size: 14px;~
- Inside source: true
*** True Line Result
      font-size: 14px;
** Processing line: ~      white-space: pre-wrap;~
- Inside source: true
*** True Line Result
      white-space: pre-wrap;
** Processing line: ~      white-space: -moz-pre-wrap;~
- Inside source: true
*** True Line Result
      white-space: -moz-pre-wrap;
** Processing line: ~      white-space: -pre-wrap;~
- Inside source: true
*** True Line Result
      white-space: -pre-wrap;
** Processing line: ~      white-space: -o-pre-wrap;~
- Inside source: true
*** True Line Result
      white-space: -o-pre-wrap;
** Processing line: ~      word-wrap: break-word;~
- Inside source: true
*** True Line Result
      word-wrap: break-word;
** Processing line: ~    }~
- Inside source: true
*** True Line Result
    }
** Processing line: ~    </style>~
- Inside source: true
*** True Line Result
    </style>
** Processing line: ~    <body>~
- Inside source: true
*** True Line Result
    <body>
** Processing line: ~      <script>~
- Inside source: true
*** True Line Result
      <script>
** Processing line: ~        async function submitForm() {~
- Inside source: true
*** True Line Result
        async function submitForm() {
** Processing line: ~            const result = await fetch("/dragon/eval/", {~
- Inside source: true
*** True Line Result
            const result = await fetch("/dragon/eval/", {
** Processing line: ~              method: 'POST',~
- Inside source: true
*** True Line Result
              method: 'POST',
** Processing line: ~              headers: { 'Content-Type': 'application/json' },~
- Inside source: true
*** True Line Result
              headers: { 'Content-Type': 'application/json' },
** Processing line: ~              body: JSON.stringify({ code: document.getElementById("code").value }),~
- Inside source: true
*** True Line Result
              body: JSON.stringify({ code: document.getElementById("code").value }),
** Processing line: ~            });~
- Inside source: true
*** True Line Result
            });
** Processing line: ~            document.getElementById("eval-result").innerHTML = await result.text();~
- Inside source: true
*** True Line Result
            document.getElementById("eval-result").innerHTML = await result.text();
** Processing line: ~        }~
- Inside source: true
*** True Line Result
        }
** Processing line: ~      </script>~
- Inside source: true
*** True Line Result
      </script>
** Processing line: ~      <form>~
- Inside source: true
*** True Line Result
      <form>
** Processing line: ~        <textarea name="code" id="code" rows="10" cols="80"># write your code here and set $result.\n$result = $gtk.args.state</textarea>~
- Inside source: true
*** True Line Result
        <textarea name="code" id="code" rows="10" cols="80"># write your code here and set $result.\n$result = $gtk.args.state</textarea>
** Processing line: ~        <br/>~
- Inside source: true
*** True Line Result
        <br/>
** Processing line: ~        <input type="button" onclick="submitForm();" value="submit" />~
- Inside source: true
*** True Line Result
        <input type="button" onclick="submitForm();" value="submit" />
** Processing line: ~      </form>~
- Inside source: true
*** True Line Result
      </form>
** Processing line: ~      <pre>curl -H "Content-Type: application/json" --data '{ "code": "$result = $args.state" }' -X POST http://localhost:9001/dragon/eval/</pre>~
- Inside source: true
*** True Line Result
      <pre>curl -H "Content-Type: application/json" --data '{ "code": "$result = $args.state" }' -X POST http://localhost:9001/dragon/eval/</pre>
** Processing line: ~      <div>Eval Result:</div>~
- Inside source: true
*** True Line Result
      <div>Eval Result:</div>
** Processing line: ~      <pre id="eval-result"></pre>~
- Inside source: true
*** True Line Result
      <pre id="eval-result"></pre>
** Processing line: ~      #{links}~
- Inside source: true
*** True Line Result
      #{links}
** Processing line: ~    </body>~
- Inside source: true
*** True Line Result
    </body>
** Processing line: ~  </html>~
- Inside source: true
*** True Line Result
  </html>
** 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: ~  <html lang="en">~
- Inside source: true
*** True Line Result
  <html lang="en">
** Processing line: ~    <head><title>console</title></head>~
- Inside source: true
*** True Line Result
    <head><title>console</title></head>
** Processing line: ~    <body>~
- Inside source: true
*** True Line Result
    <body>
** Processing line: ~      <script>~
- Inside source: true
*** True Line Result
      <script>
** Processing line: ~        async function submitForm(url) {~
- Inside source: true
*** True Line Result
        async function submitForm(url) {
** Processing line: ~          const result = await fetch(url, {~
- Inside source: true
*** True Line Result
          const result = await fetch(url, {
** Processing line: ~            method: 'POST',~
- Inside source: true
*** True Line Result
            method: 'POST',
** Processing line: ~            headers: { 'Content-Type': 'application/json' },~
- Inside source: true
*** True Line Result
            headers: { 'Content-Type': 'application/json' },
** Processing line: ~            body: JSON.stringify({}),~
- Inside source: true
*** True Line Result
            body: JSON.stringify({}),
** Processing line: ~          });~
- Inside source: true
*** True Line Result
          });
** Processing line: ~          document.getElementById("success-notification").innerHTML = "successful";~
- Inside source: true
*** True Line Result
          document.getElementById("success-notification").innerHTML = "successful";
** Processing line: ~          setTimeout(function() { document.getElementById("success-notification").innerHTML = ""; }, 3000);~
- Inside source: true
*** True Line Result
          setTimeout(function() { document.getElementById("success-notification").innerHTML = ""; }, 3000);
** Processing line: ~        }~
- Inside source: true
*** True Line Result
        }
** Processing line: ~      </script>~
- Inside source: true
*** True Line Result
      </script>
** Processing line: ~      <form>~
- Inside source: true
*** True Line Result
      <form>
** Processing line: ~        <input type="button" value="Show Console" onclick="submitForm('/dragon/show_console/')" />~
- Inside source: true
*** True Line Result
        <input type="button" value="Show Console" onclick="submitForm('/dragon/show_console/')" />
** Processing line: ~      </form>~
- Inside source: true
*** True Line Result
      </form>
** Processing line: ~      <form>~
- Inside source: true
*** True Line Result
      <form>
** Processing line: ~        <input type="button" value="Reset Game" onclick="submitForm('/dragon/reset/');" />~
- Inside source: true
*** True Line Result
        <input type="button" value="Reset Game" onclick="submitForm('/dragon/reset/');" />
** Processing line: ~      </form>~
- Inside source: true
*** True Line Result
      </form>
** Processing line: ~      <form>~
- Inside source: true
*** True Line Result
      <form>
** Processing line: ~        <input type="button" value="Record Gameplay" onclick="submitForm('/dragon/record/');" />~
- Inside source: true
*** True Line Result
        <input type="button" value="Record Gameplay" onclick="submitForm('/dragon/record/');" />
** Processing line: ~      </form>~
- Inside source: true
*** True Line Result
      </form>
** Processing line: ~      <form>~
- Inside source: true
*** True Line Result
      <form>
** Processing line: ~        <input type="button" value="Stop Recording" onclick="submitForm('/dragon/record_stop/');" />~
- Inside source: true
*** True Line Result
        <input type="button" value="Stop Recording" onclick="submitForm('/dragon/record_stop/');" />
** Processing line: ~      </form>~
- Inside source: true
*** True Line Result
      </form>
** Processing line: ~      <form>~
- Inside source: true
*** True Line Result
      <form>
** Processing line: ~        <input type="button" value="Replay Recording" onclick="submitForm('/dragon/replay/');" />~
- Inside source: true
*** True Line Result
        <input type="button" value="Replay Recording" onclick="submitForm('/dragon/replay/');" />
** Processing line: ~      </form>~
- Inside source: true
*** True Line Result
      </form>
** Processing line: ~      <div id="success-notification"></div>~
- Inside source: true
*** True Line Result
      <div id="success-notification"></div>
** Processing line: ~      #{links}~
- Inside source: true
*** True Line Result
      #{links}
** Processing line: ~    </body>~
- Inside source: true
*** True Line Result
    </body>
** Processing line: ~  </html>~
- Inside source: true
*** True Line Result
  </html>
** 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: ~                  :angle_x, :angle_y, :z,~
- Inside source: true
*** True Line Result
                  :angle_x, :angle_y, :z,
** 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: ~                  :source_x2, :source_y2, :source_x3, :source_y3, :x2, :y2, :x3, :y3~
- Inside source: true
*** True Line Result
                  :source_x2, :source_y2, :source_x3, :source_y3, :x2, :y2, :x3, :y3
** 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: ~      attr :key_down~
- Inside source: true
*** True Line Result
      attr :key_down
** Processing line: ~      attr :key_up~
- Inside source: true
*** True Line Result
      attr :key_up
** Processing line: ~      attr :key_held~
- Inside source: true
*** True Line Result
      attr :key_held
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      attr :left_analog_x_raw,~
- Inside source: true
*** True Line Result
      attr :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: ~      attr :connected~
- Inside source: true
*** True Line Result
      attr :connected
** 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: ~        @connected = false~
- Inside source: true
*** True Line Result
        @connected = false
** 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: ~#+end_src~
- Line was 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: ~    class Inputs~
- Inside source: true
*** True Line Result
    class Inputs
** Processing line: ~      attr_reader :controllers~
- Inside source: true
*** True Line Result
      attr_reader :controllers
** Processing line: ~      attr_reader :keyboard~
- Inside source: true
*** True Line Result
      attr_reader :keyboard
** Processing line: ~      attr_reader :mouse~
- Inside source: true
*** True Line Result
      attr_reader :mouse
** Processing line: ~      attr_accessor :http_requests~
- Inside source: true
*** True Line Result
      attr_accessor :http_requests
** 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: ~      attr_accessor :finger_left, :finger_right~
- Inside source: true
*** True Line Result
      attr_accessor :finger_left, :finger_right
** 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. This is the NAME of the certificate as it's displayed in Keychain Access.~
- Inside source: true
*** True Line Result
  # devcert is the certificate to use for development/deploying to your local device. This is the NAME of the certificate as it's displayed in Keychain Access.
** Processing line: ~  devcert=~
- Inside source: true
*** True Line Result
  devcert=
** Processing line: ~  # prodcert is the certificate to use for distribution to the app store. This is the NAME of the certificate as it's displayed in Keychain Access.~
- Inside source: true
*** True Line Result
  # prodcert is the certificate to use for distribution to the app store. This is the NAME of the certificate as it's displayed in Keychain Access.
** 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? '</plist>'~
- Inside source: true
*** True Line Result
          if l.start_with? '</plist>'
** Processing line: ~            '</plist>'~
- Inside source: true
*** True Line Result
            '</plist>'
** 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? '<data>'~
- Inside source: true
*** True Line Result
          elsif l.include? '<data>'
** 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 !cli_app_exist?(ideviceinstaller_cli_app)~
- Inside source: true
*** True Line Result
      if !cli_app_exist?(ideviceinstaller_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 ideviceinstaller`.",~
- Inside source: true
*** True Line Result
           "** 2. Run: `brew install ideviceinstaller`.",
** Processing line: ~           { w: 500, h: 91, path: get_reserved_sprite("brew-install-ideviceinstaller.png") },~
- Inside source: true
*** True Line Result
           { w: 500, h: 91, path: get_reserved_sprite("brew-install-ideviceinstaller.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 ideviceinstaller_cli_app~
- Inside source: true
*** True Line Result
    def ideviceinstaller_cli_app
** Processing line: ~      "ideviceinstaller"~
- Inside source: true
*** True Line Result
      "ideviceinstaller"
** 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: ~  <?xml version="1.0" encoding="UTF-8"?>~
- Inside source: true
*** True Line Result
  <?xml version="1.0" encoding="UTF-8"?>
** Processing line: ~  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
- Inside source: true
*** True Line Result
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
** Processing line: ~  <plist version="1.0">~
- Inside source: true
*** True Line Result
  <plist version="1.0">
** Processing line: ~          <dict>~
- Inside source: true
*** True Line Result
          <dict>
** Processing line: ~                  <key>application-identifier</key>~
- Inside source: true
*** True Line Result
                  <key>application-identifier</key>
** Processing line: ~                  <string>:app_id</string>~
- Inside source: true
*** True Line Result
                  <string>:app_id</string>
** Processing line: ~                  <key>beta-reports-active</key>~
- Inside source: true
*** True Line Result
                  <key>beta-reports-active</key>
** Processing line: ~                  <true/>~
- Inside source: true
*** True Line Result
                  <true/>
** Processing line: ~          </dict>~
- Inside source: true
*** True Line Result
          </dict>
** Processing line: ~  </plist>~
- Inside source: true
*** True Line Result
  </plist>
** 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: ~  <?xml version="1.0" encoding="UTF-8"?>~
- Inside source: true
*** True Line Result
  <?xml version="1.0" encoding="UTF-8"?>
** Processing line: ~  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
- Inside source: true
*** True Line Result
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
** Processing line: ~  <plist version="1.0">~
- Inside source: true
*** True Line Result
  <plist version="1.0">
** Processing line: ~          <dict>~
- Inside source: true
*** True Line Result
          <dict>
** Processing line: ~                  <key>application-identifier</key>~
- Inside source: true
*** True Line Result
                  <key>application-identifier</key>
** Processing line: ~                  <string>:app_id</string>~
- Inside source: true
*** True Line Result
                  <string>:app_id</string>
** Processing line: ~                  <key>get-task-allow</key>~
- Inside source: true
*** True Line Result
                  <key>get-task-allow</key>
** Processing line: ~                  <true/>~
- Inside source: true
*** True Line Result
                  <true/>
** Processing line: ~          </dict>~
- Inside source: true
*** True Line Result
          </dict>
** Processing line: ~  </plist>~
- Inside source: true
*** True Line Result
  </plist>
** 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/#{@app_name}\""~
- 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/#{@app_name}\""
** 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 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: ~  <?xml version="1.0" encoding="UTF-8"?>~
- Inside source: true
*** True Line Result
  <?xml version="1.0" encoding="UTF-8"?>
** Processing line: ~  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
- Inside source: true
*** True Line Result
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
** Processing line: ~  <plist version="1.0">~
- Inside source: true
*** True Line Result
  <plist version="1.0">
** Processing line: ~  <dict>~
- Inside source: true
*** True Line Result
  <dict>
** Processing line: ~          <key>NSAppTransportSecurity</key>~
- Inside source: true
*** True Line Result
          <key>NSAppTransportSecurity</key>
** Processing line: ~          <dict>~
- Inside source: true
*** True Line Result
          <dict>
** Processing line: ~                  <key>NSAllowsArbitraryLoads</key>~
- Inside source: true
*** True Line Result
                  <key>NSAllowsArbitraryLoads</key>
** Processing line: ~                  <true/>~
- Inside source: true
*** True Line Result
                  <true/>
** Processing line: ~                  <key>NSExceptionDomains</key>~
- Inside source: true
*** True Line Result
                  <key>NSExceptionDomains</key>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>google.com</key>~
- Inside source: true
*** True Line Result
                          <key>google.com</key>
** Processing line: ~                          <dict>~
- Inside source: true
*** True Line Result
                          <dict>
** Processing line: ~                                  <key>NSExceptionAllowsInsecureHTTPLoads</key>~
- Inside source: true
*** True Line Result
                                  <key>NSExceptionAllowsInsecureHTTPLoads</key>
** Processing line: ~                                  <true/>~
- Inside source: true
*** True Line Result
                                  <true/>
** Processing line: ~                                  <key>NSIncludesSubdomains</key>~
- Inside source: true
*** True Line Result
                                  <key>NSIncludesSubdomains</key>
** Processing line: ~                                  <true/>~
- Inside source: true
*** True Line Result
                                  <true/>
** Processing line: ~                          </dict>~
- Inside source: true
*** True Line Result
                          </dict>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~          </dict>~
- Inside source: true
*** True Line Result
          </dict>
** Processing line: ~          <key>BuildMachineOSBuild</key>~
- Inside source: true
*** True Line Result
          <key>BuildMachineOSBuild</key>
** Processing line: ~          <string>20D91</string>~
- Inside source: true
*** True Line Result
          <string>20D91</string>
** Processing line: ~          <key>CFBundleDevelopmentRegion</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleDevelopmentRegion</key>
** Processing line: ~          <string>en</string>~
- Inside source: true
*** True Line Result
          <string>en</string>
** Processing line: ~          <key>CFBundleDisplayName</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleDisplayName</key>
** Processing line: ~          <string>:app_name</string>~
- Inside source: true
*** True Line Result
          <string>:app_name</string>
** Processing line: ~          <key>CFBundleExecutable</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleExecutable</key>
** Processing line: ~          <string>:app_name</string>~
- Inside source: true
*** True Line Result
          <string>:app_name</string>
** Processing line: ~          <key>CFBundleIconFiles</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleIconFiles</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <string>AppIcon60x60</string>~
- Inside source: true
*** True Line Result
                  <string>AppIcon60x60</string>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~          <key>CFBundleIcons</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleIcons</key>
** Processing line: ~          <dict>~
- Inside source: true
*** True Line Result
          <dict>
** Processing line: ~                  <key>CFBundlePrimaryIcon</key>~
- Inside source: true
*** True Line Result
                  <key>CFBundlePrimaryIcon</key>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>CFBundleIconFiles</key>~
- Inside source: true
*** True Line Result
                          <key>CFBundleIconFiles</key>
** Processing line: ~                          <array>~
- Inside source: true
*** True Line Result
                          <array>
** Processing line: ~                                  <string>AppIcon60x60</string>~
- Inside source: true
*** True Line Result
                                  <string>AppIcon60x60</string>
** Processing line: ~                          </array>~
- Inside source: true
*** True Line Result
                          </array>
** Processing line: ~                          <key>CFBundleIconName</key>~
- Inside source: true
*** True Line Result
                          <key>CFBundleIconName</key>
** Processing line: ~                          <string>AppIcon</string>~
- Inside source: true
*** True Line Result
                          <string>AppIcon</string>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~          </dict>~
- Inside source: true
*** True Line Result
          </dict>
** Processing line: ~          <key>CFBundleIcons~ipad</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleIcons~ipad</key>
** Processing line: ~          <dict>~
- Inside source: true
*** True Line Result
          <dict>
** Processing line: ~                  <key>CFBundlePrimaryIcon</key>~
- Inside source: true
*** True Line Result
                  <key>CFBundlePrimaryIcon</key>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>CFBundleIconFiles</key>~
- Inside source: true
*** True Line Result
                          <key>CFBundleIconFiles</key>
** Processing line: ~                          <array>~
- Inside source: true
*** True Line Result
                          <array>
** Processing line: ~                                  <string>AppIcon60x60</string>~
- Inside source: true
*** True Line Result
                                  <string>AppIcon60x60</string>
** Processing line: ~                                  <string>AppIcon76x76</string>~
- Inside source: true
*** True Line Result
                                  <string>AppIcon76x76</string>
** Processing line: ~                                  <string>AppIcon83.5x83.5</string>~
- Inside source: true
*** True Line Result
                                  <string>AppIcon83.5x83.5</string>
** Processing line: ~                          </array>~
- Inside source: true
*** True Line Result
                          </array>
** Processing line: ~                          <key>CFBundleIconName</key>~
- Inside source: true
*** True Line Result
                          <key>CFBundleIconName</key>
** Processing line: ~                          <string>AppIcon</string>~
- Inside source: true
*** True Line Result
                          <string>AppIcon</string>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~          </dict>~
- Inside source: true
*** True Line Result
          </dict>
** Processing line: ~          <key>CFBundleIdentifier</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleIdentifier</key>
** Processing line: ~          <string>:app_id</string>~
- Inside source: true
*** True Line Result
          <string>:app_id</string>
** Processing line: ~          <key>CFBundleInfoDictionaryVersion</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleInfoDictionaryVersion</key>
** Processing line: ~          <string>:app_version</string>~
- Inside source: true
*** True Line Result
          <string>:app_version</string>
** Processing line: ~          <key>CFBundleName</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleName</key>
** Processing line: ~          <string>:app_name</string>~
- Inside source: true
*** True Line Result
          <string>:app_name</string>
** Processing line: ~          <key>CFBundlePackageType</key>~
- Inside source: true
*** True Line Result
          <key>CFBundlePackageType</key>
** Processing line: ~          <string>APPL</string>~
- Inside source: true
*** True Line Result
          <string>APPL</string>
** Processing line: ~          <key>CFBundleShortVersionString</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleShortVersionString</key>
** Processing line: ~          <string>:app_version</string>~
- Inside source: true
*** True Line Result
          <string>:app_version</string>
** Processing line: ~          <key>CFBundleSignature</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleSignature</key>
** Processing line: ~          <string>????</string>~
- Inside source: true
*** True Line Result
          <string>????</string>
** Processing line: ~          <key>CFBundleSupportedPlatforms</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleSupportedPlatforms</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <string>iPhoneOS</string>~
- Inside source: true
*** True Line Result
                  <string>iPhoneOS</string>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~          <key>CFBundleVersion</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleVersion</key>
** Processing line: ~          <string>:app_version</string>~
- Inside source: true
*** True Line Result
          <string>:app_version</string>
** Processing line: ~          <key>DTCompiler</key>~
- Inside source: true
*** True Line Result
          <key>DTCompiler</key>
** Processing line: ~          <string>com.apple.compilers.llvm.clang.1_0</string>~
- Inside source: true
*** True Line Result
          <string>com.apple.compilers.llvm.clang.1_0</string>
** Processing line: ~          <key>DTPlatformBuild</key>~
- Inside source: true
*** True Line Result
          <key>DTPlatformBuild</key>
** Processing line: ~          <string>18D46</string>~
- Inside source: true
*** True Line Result
          <string>18D46</string>
** Processing line: ~          <key>DTPlatformName</key>~
- Inside source: true
*** True Line Result
          <key>DTPlatformName</key>
** Processing line: ~          <string>iphoneos</string>~
- Inside source: true
*** True Line Result
          <string>iphoneos</string>
** Processing line: ~          <key>DTPlatformVersion</key>~
- Inside source: true
*** True Line Result
          <key>DTPlatformVersion</key>
** Processing line: ~          <string>14.4</string>~
- Inside source: true
*** True Line Result
          <string>14.4</string>
** Processing line: ~          <key>DTSDKBuild</key>~
- Inside source: true
*** True Line Result
          <key>DTSDKBuild</key>
** Processing line: ~          <string>18D46</string>~
- Inside source: true
*** True Line Result
          <string>18D46</string>
** Processing line: ~          <key>DTSDKName</key>~
- Inside source: true
*** True Line Result
          <key>DTSDKName</key>
** Processing line: ~          <string>iphoneos14.4</string>~
- Inside source: true
*** True Line Result
          <string>iphoneos14.4</string>
** Processing line: ~          <key>DTXcode</key>~
- Inside source: true
*** True Line Result
          <key>DTXcode</key>
** Processing line: ~          <string>0124</string>~
- Inside source: true
*** True Line Result
          <string>0124</string>
** Processing line: ~          <key>DTXcodeBuild</key>~
- Inside source: true
*** True Line Result
          <key>DTXcodeBuild</key>
** Processing line: ~          <string>12D4e</string>~
- Inside source: true
*** True Line Result
          <string>12D4e</string>
** Processing line: ~          <key>MinimumOSVersion</key>~
- Inside source: true
*** True Line Result
          <key>MinimumOSVersion</key>
** Processing line: ~          <string>14.4</string>~
- Inside source: true
*** True Line Result
          <string>14.4</string>
** Processing line: ~          <key>UIAppFonts</key>~
- Inside source: true
*** True Line Result
          <key>UIAppFonts</key>
** Processing line: ~          <array/>~
- Inside source: true
*** True Line Result
          <array/>
** Processing line: ~          <key>UIBackgroundModes</key>~
- Inside source: true
*** True Line Result
          <key>UIBackgroundModes</key>
** Processing line: ~          <array/>~
- Inside source: true
*** True Line Result
          <array/>
** Processing line: ~          <key>UIDeviceFamily</key>~
- Inside source: true
*** True Line Result
          <key>UIDeviceFamily</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <integer>1</integer>~
- Inside source: true
*** True Line Result
                  <integer>1</integer>
** Processing line: ~                  <integer>2</integer>~
- Inside source: true
*** True Line Result
                  <integer>2</integer>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~          <key>UILaunchImages</key>~
- Inside source: true
*** True Line Result
          <key>UILaunchImages</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageMinimumOSVersion</key>
** Processing line: ~                          <string>7.0</string>~
- Inside source: true
*** True Line Result
                          <string>7.0</string>
** Processing line: ~                          <key>UILaunchImageName</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageName</key>
** Processing line: ~                          <string>Default-568h@2x</string>~
- Inside source: true
*** True Line Result
                          <string>Default-568h@2x</string>
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageOrientation</key>
** Processing line: ~                          <string>Portrait</string>~
- Inside source: true
*** True Line Result
                          <string>Portrait</string>
** Processing line: ~                          <key>UILaunchImageSize</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageSize</key>
** Processing line: ~                          <string>{320, 568}</string>~
- Inside source: true
*** True Line Result
                          <string>{320, 568}</string>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageMinimumOSVersion</key>
** Processing line: ~                          <string>7.0</string>~
- Inside source: true
*** True Line Result
                          <string>7.0</string>
** Processing line: ~                          <key>UILaunchImageName</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageName</key>
** Processing line: ~                          <string>Default-667h@2x</string>~
- Inside source: true
*** True Line Result
                          <string>Default-667h@2x</string>
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageOrientation</key>
** Processing line: ~                          <string>Portrait</string>~
- Inside source: true
*** True Line Result
                          <string>Portrait</string>
** Processing line: ~                          <key>UILaunchImageSize</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageSize</key>
** Processing line: ~                          <string>{375, 667}</string>~
- Inside source: true
*** True Line Result
                          <string>{375, 667}</string>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageMinimumOSVersion</key>
** Processing line: ~                          <string>7.0</string>~
- Inside source: true
*** True Line Result
                          <string>7.0</string>
** Processing line: ~                          <key>UILaunchImageName</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageName</key>
** Processing line: ~                          <string>Default-736h@3x</string>~
- Inside source: true
*** True Line Result
                          <string>Default-736h@3x</string>
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageOrientation</key>
** Processing line: ~                          <string>Portrait</string>~
- Inside source: true
*** True Line Result
                          <string>Portrait</string>
** Processing line: ~                          <key>UILaunchImageSize</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageSize</key>
** Processing line: ~                          <string>{414, 736}</string>~
- Inside source: true
*** True Line Result
                          <string>{414, 736}</string>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~          <key>UILaunchStoryboardName</key>~
- Inside source: true
*** True Line Result
          <key>UILaunchStoryboardName</key>
** Processing line: ~          <string>SimpleSplash</string>~
- Inside source: true
*** True Line Result
          <string>SimpleSplash</string>
** Processing line: ~          <key>UIRequiredDeviceCapabilities</key>~
- Inside source: true
*** True Line Result
          <key>UIRequiredDeviceCapabilities</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <string>arm64</string>~
- Inside source: true
*** True Line Result
                  <string>arm64</string>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~          <key>UIRequiresFullScreen</key>~
- Inside source: true
*** True Line Result
          <key>UIRequiresFullScreen</key>
** Processing line: ~          <true/>~
- Inside source: true
*** True Line Result
          <true/>
** Processing line: ~          <key>UIStatusBarStyle</key>~
- Inside source: true
*** True Line Result
          <key>UIStatusBarStyle</key>
** Processing line: ~          <string>UIStatusBarStyleDefault</string>~
- Inside source: true
*** True Line Result
          <string>UIStatusBarStyleDefault</string>
** Processing line: ~          <key>UISupportedInterfaceOrientations</key>~
- Inside source: true
*** True Line Result
          <key>UISupportedInterfaceOrientations</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <string>UIInterfaceOrientationLandscapeRight</string>~
- Inside source: true
*** True Line Result
                  <string>UIInterfaceOrientationLandscapeRight</string>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~  </dict>~
- Inside source: true
*** True Line Result
  </dict>
** Processing line: ~  </plist>~
- Inside source: true
*** True Line Result
  </plist>
** Processing line: ~  XML~
- Inside source: true
*** True Line Result
  XML
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # <string>UIInterfaceOrientationPortrait</string>~
- Inside source: true
*** True Line Result
      # <string>UIInterfaceOrientationPortrait</string>
** Processing line: ~      # <string>UIInterfaceOrientationLandscapeRight</string>~
- Inside source: true
*** True Line Result
      # <string>UIInterfaceOrientationLandscapeRight</string>
** 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: ~  <?xml version="1.0" encoding="UTF-8"?>~
- Inside source: true
*** True Line Result
  <?xml version="1.0" encoding="UTF-8"?>
** Processing line: ~  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
- Inside source: true
*** True Line Result
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
** Processing line: ~  <plist version="1.0">~
- Inside source: true
*** True Line Result
  <plist version="1.0">
** Processing line: ~  <dict>~
- Inside source: true
*** True Line Result
  <dict>
** Processing line: ~          <key>BuildMachineOSBuild</key>~
- Inside source: true
*** True Line Result
          <key>BuildMachineOSBuild</key>
** Processing line: ~          <string>20D91</string>~
- Inside source: true
*** True Line Result
          <string>20D91</string>
** Processing line: ~          <key>CFBundleDevelopmentRegion</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleDevelopmentRegion</key>
** Processing line: ~          <string>en</string>~
- Inside source: true
*** True Line Result
          <string>en</string>
** Processing line: ~          <key>CFBundleDisplayName</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleDisplayName</key>
** Processing line: ~          <string>:app_name</string>~
- Inside source: true
*** True Line Result
          <string>:app_name</string>
** Processing line: ~          <key>CFBundleExecutable</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleExecutable</key>
** Processing line: ~          <string>:app_name</string>~
- Inside source: true
*** True Line Result
          <string>:app_name</string>
** Processing line: ~          <key>CFBundleIconFiles</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleIconFiles</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <string>AppIcon60x60</string>~
- Inside source: true
*** True Line Result
                  <string>AppIcon60x60</string>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~          <key>CFBundleIcons</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleIcons</key>
** Processing line: ~          <dict>~
- Inside source: true
*** True Line Result
          <dict>
** Processing line: ~                  <key>CFBundlePrimaryIcon</key>~
- Inside source: true
*** True Line Result
                  <key>CFBundlePrimaryIcon</key>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>CFBundleIconFiles</key>~
- Inside source: true
*** True Line Result
                          <key>CFBundleIconFiles</key>
** Processing line: ~                          <array>~
- Inside source: true
*** True Line Result
                          <array>
** Processing line: ~                                  <string>AppIcon60x60</string>~
- Inside source: true
*** True Line Result
                                  <string>AppIcon60x60</string>
** Processing line: ~                          </array>~
- Inside source: true
*** True Line Result
                          </array>
** Processing line: ~                          <key>CFBundleIconName</key>~
- Inside source: true
*** True Line Result
                          <key>CFBundleIconName</key>
** Processing line: ~                          <string>AppIcon</string>~
- Inside source: true
*** True Line Result
                          <string>AppIcon</string>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~          </dict>~
- Inside source: true
*** True Line Result
          </dict>
** Processing line: ~          <key>CFBundleIcons~ipad</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleIcons~ipad</key>
** Processing line: ~          <dict>~
- Inside source: true
*** True Line Result
          <dict>
** Processing line: ~                  <key>CFBundlePrimaryIcon</key>~
- Inside source: true
*** True Line Result
                  <key>CFBundlePrimaryIcon</key>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>CFBundleIconFiles</key>~
- Inside source: true
*** True Line Result
                          <key>CFBundleIconFiles</key>
** Processing line: ~                          <array>~
- Inside source: true
*** True Line Result
                          <array>
** Processing line: ~                                  <string>AppIcon60x60</string>~
- Inside source: true
*** True Line Result
                                  <string>AppIcon60x60</string>
** Processing line: ~                                  <string>AppIcon76x76</string>~
- Inside source: true
*** True Line Result
                                  <string>AppIcon76x76</string>
** Processing line: ~                                  <string>AppIcon83.5x83.5</string>~
- Inside source: true
*** True Line Result
                                  <string>AppIcon83.5x83.5</string>
** Processing line: ~                          </array>~
- Inside source: true
*** True Line Result
                          </array>
** Processing line: ~                          <key>CFBundleIconName</key>~
- Inside source: true
*** True Line Result
                          <key>CFBundleIconName</key>
** Processing line: ~                          <string>AppIcon</string>~
- Inside source: true
*** True Line Result
                          <string>AppIcon</string>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~          </dict>~
- Inside source: true
*** True Line Result
          </dict>
** Processing line: ~          <key>CFBundleIdentifier</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleIdentifier</key>
** Processing line: ~          <string>:app_id</string>~
- Inside source: true
*** True Line Result
          <string>:app_id</string>
** Processing line: ~          <key>CFBundleInfoDictionaryVersion</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleInfoDictionaryVersion</key>
** Processing line: ~          <string>:app_version</string>~
- Inside source: true
*** True Line Result
          <string>:app_version</string>
** Processing line: ~          <key>CFBundleName</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleName</key>
** Processing line: ~          <string>:app_name</string>~
- Inside source: true
*** True Line Result
          <string>:app_name</string>
** Processing line: ~          <key>CFBundlePackageType</key>~
- Inside source: true
*** True Line Result
          <key>CFBundlePackageType</key>
** Processing line: ~          <string>APPL</string>~
- Inside source: true
*** True Line Result
          <string>APPL</string>
** Processing line: ~          <key>CFBundleShortVersionString</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleShortVersionString</key>
** Processing line: ~          <string>:app_version</string>~
- Inside source: true
*** True Line Result
          <string>:app_version</string>
** Processing line: ~          <key>CFBundleSignature</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleSignature</key>
** Processing line: ~          <string>????</string>~
- Inside source: true
*** True Line Result
          <string>????</string>
** Processing line: ~          <key>CFBundleSupportedPlatforms</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleSupportedPlatforms</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <string>iPhoneOS</string>~
- Inside source: true
*** True Line Result
                  <string>iPhoneOS</string>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~          <key>CFBundleVersion</key>~
- Inside source: true
*** True Line Result
          <key>CFBundleVersion</key>
** Processing line: ~          <string>:app_version</string>~
- Inside source: true
*** True Line Result
          <string>:app_version</string>
** Processing line: ~          <key>DTCompiler</key>~
- Inside source: true
*** True Line Result
          <key>DTCompiler</key>
** Processing line: ~          <string>com.apple.compilers.llvm.clang.1_0</string>~
- Inside source: true
*** True Line Result
          <string>com.apple.compilers.llvm.clang.1_0</string>
** Processing line: ~          <key>DTPlatformBuild</key>~
- Inside source: true
*** True Line Result
          <key>DTPlatformBuild</key>
** Processing line: ~          <string>18D46</string>~
- Inside source: true
*** True Line Result
          <string>18D46</string>
** Processing line: ~          <key>DTPlatformName</key>~
- Inside source: true
*** True Line Result
          <key>DTPlatformName</key>
** Processing line: ~          <string>iphoneos</string>~
- Inside source: true
*** True Line Result
          <string>iphoneos</string>
** Processing line: ~          <key>DTPlatformVersion</key>~
- Inside source: true
*** True Line Result
          <key>DTPlatformVersion</key>
** Processing line: ~          <string>14.4</string>~
- Inside source: true
*** True Line Result
          <string>14.4</string>
** Processing line: ~          <key>DTSDKBuild</key>~
- Inside source: true
*** True Line Result
          <key>DTSDKBuild</key>
** Processing line: ~          <string>18D46</string>~
- Inside source: true
*** True Line Result
          <string>18D46</string>
** Processing line: ~          <key>DTSDKName</key>~
- Inside source: true
*** True Line Result
          <key>DTSDKName</key>
** Processing line: ~          <string>iphoneos14.4</string>~
- Inside source: true
*** True Line Result
          <string>iphoneos14.4</string>
** Processing line: ~          <key>DTXcode</key>~
- Inside source: true
*** True Line Result
          <key>DTXcode</key>
** Processing line: ~          <string>0124</string>~
- Inside source: true
*** True Line Result
          <string>0124</string>
** Processing line: ~          <key>DTXcodeBuild</key>~
- Inside source: true
*** True Line Result
          <key>DTXcodeBuild</key>
** Processing line: ~          <string>12D4e</string>~
- Inside source: true
*** True Line Result
          <string>12D4e</string>
** Processing line: ~          <key>MinimumOSVersion</key>~
- Inside source: true
*** True Line Result
          <key>MinimumOSVersion</key>
** Processing line: ~          <string>14.4</string>~
- Inside source: true
*** True Line Result
          <string>14.4</string>
** Processing line: ~          <key>UIAppFonts</key>~
- Inside source: true
*** True Line Result
          <key>UIAppFonts</key>
** Processing line: ~          <array/>~
- Inside source: true
*** True Line Result
          <array/>
** Processing line: ~          <key>UIBackgroundModes</key>~
- Inside source: true
*** True Line Result
          <key>UIBackgroundModes</key>
** Processing line: ~          <array/>~
- Inside source: true
*** True Line Result
          <array/>
** Processing line: ~          <key>UIDeviceFamily</key>~
- Inside source: true
*** True Line Result
          <key>UIDeviceFamily</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <integer>1</integer>~
- Inside source: true
*** True Line Result
                  <integer>1</integer>
** Processing line: ~                  <integer>2</integer>~
- Inside source: true
*** True Line Result
                  <integer>2</integer>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~          <key>UILaunchImages</key>~
- Inside source: true
*** True Line Result
          <key>UILaunchImages</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageMinimumOSVersion</key>
** Processing line: ~                          <string>7.0</string>~
- Inside source: true
*** True Line Result
                          <string>7.0</string>
** Processing line: ~                          <key>UILaunchImageName</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageName</key>
** Processing line: ~                          <string>Default-568h@2x</string>~
- Inside source: true
*** True Line Result
                          <string>Default-568h@2x</string>
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageOrientation</key>
** Processing line: ~                          <string>Portrait</string>~
- Inside source: true
*** True Line Result
                          <string>Portrait</string>
** Processing line: ~                          <key>UILaunchImageSize</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageSize</key>
** Processing line: ~                          <string>{320, 568}</string>~
- Inside source: true
*** True Line Result
                          <string>{320, 568}</string>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageMinimumOSVersion</key>
** Processing line: ~                          <string>7.0</string>~
- Inside source: true
*** True Line Result
                          <string>7.0</string>
** Processing line: ~                          <key>UILaunchImageName</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageName</key>
** Processing line: ~                          <string>Default-667h@2x</string>~
- Inside source: true
*** True Line Result
                          <string>Default-667h@2x</string>
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageOrientation</key>
** Processing line: ~                          <string>Portrait</string>~
- Inside source: true
*** True Line Result
                          <string>Portrait</string>
** Processing line: ~                          <key>UILaunchImageSize</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageSize</key>
** Processing line: ~                          <string>{375, 667}</string>~
- Inside source: true
*** True Line Result
                          <string>{375, 667}</string>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~                  <dict>~
- Inside source: true
*** True Line Result
                  <dict>
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageMinimumOSVersion</key>
** Processing line: ~                          <string>7.0</string>~
- Inside source: true
*** True Line Result
                          <string>7.0</string>
** Processing line: ~                          <key>UILaunchImageName</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageName</key>
** Processing line: ~                          <string>Default-736h@3x</string>~
- Inside source: true
*** True Line Result
                          <string>Default-736h@3x</string>
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageOrientation</key>
** Processing line: ~                          <string>Portrait</string>~
- Inside source: true
*** True Line Result
                          <string>Portrait</string>
** Processing line: ~                          <key>UILaunchImageSize</key>~
- Inside source: true
*** True Line Result
                          <key>UILaunchImageSize</key>
** Processing line: ~                          <string>{414, 736}</string>~
- Inside source: true
*** True Line Result
                          <string>{414, 736}</string>
** Processing line: ~                  </dict>~
- Inside source: true
*** True Line Result
                  </dict>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~          <key>UILaunchStoryboardName</key>~
- Inside source: true
*** True Line Result
          <key>UILaunchStoryboardName</key>
** Processing line: ~          <string>SimpleSplash</string>~
- Inside source: true
*** True Line Result
          <string>SimpleSplash</string>
** Processing line: ~          <key>UIRequiredDeviceCapabilities</key>~
- Inside source: true
*** True Line Result
          <key>UIRequiredDeviceCapabilities</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <string>arm64</string>~
- Inside source: true
*** True Line Result
                  <string>arm64</string>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~          <key>UIRequiresFullScreen</key>~
- Inside source: true
*** True Line Result
          <key>UIRequiresFullScreen</key>
** Processing line: ~          <true/>~
- Inside source: true
*** True Line Result
          <true/>
** Processing line: ~          <key>UIStatusBarStyle</key>~
- Inside source: true
*** True Line Result
          <key>UIStatusBarStyle</key>
** Processing line: ~          <string>UIStatusBarStyleDefault</string>~
- Inside source: true
*** True Line Result
          <string>UIStatusBarStyleDefault</string>
** Processing line: ~          <key>UISupportedInterfaceOrientations</key>~
- Inside source: true
*** True Line Result
          <key>UISupportedInterfaceOrientations</key>
** Processing line: ~          <array>~
- Inside source: true
*** True Line Result
          <array>
** Processing line: ~                  <string>UIInterfaceOrientationLandscapeRight</string>~
- Inside source: true
*** True Line Result
                  <string>UIInterfaceOrientationLandscapeRight</string>
** Processing line: ~          </array>~
- Inside source: true
*** True Line Result
          </array>
** Processing line: ~  </dict>~
- Inside source: true
*** True Line Result
  </dict>
** Processing line: ~  </plist>~
- Inside source: true
*** True Line Result
  </plist>
** Processing line: ~  XML~
- Inside source: true
*** True Line Result
  XML
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      # <string>UIInterfaceOrientationPortrait</string>~
- Inside source: true
*** True Line Result
      # <string>UIInterfaceOrientationPortrait</string>
** Processing line: ~      # <string>UIInterfaceOrientationLandscapeRight</string>~
- Inside source: true
*** True Line Result
      # <string>UIInterfaceOrientationLandscapeRight</string>
** 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: ~      sh %Q[rm -rf "#{app_path}/metadata"]~
- Inside source: true
*** True Line Result
      sh %Q[rm -rf "#{app_path}/metadata"]
** 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 "mv \"#{tmp_directory}/#{@app_name}.app/Runtime\" \"#{tmp_directory}/#{@app_name}.app/#{@app_name}\""~
- Inside source: true
*** True Line Result
      sh "mv \"#{tmp_directory}/#{@app_name}.app/Runtime\" \"#{tmp_directory}/#{@app_name}.app/#{@app_name}\""
** 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: ~      sh %Q[cp -r "#{root_folder}/metadata/" "#{app_path}/metadata/"]~
- Inside source: true
*** True Line Result
      sh %Q[cp -r "#{root_folder}/metadata/" "#{app_path}/metadata/"]
** 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 "#{app_path}/metadata/DRAGONRUBY_PRODUCTION_BUILD"]~
- Inside source: true
*** True Line Result
      sh %Q[touch "#{app_path}/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 "ideviceinstaller -i \"#{tmp_directory}/#{@app_name}.ipa\""~
- Inside source: true
*** True Line Result
      sh "ideviceinstaller -i \"#{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)~
- Inside source: true
*** True Line Result
      if !repeat && (self + animation_length) <= (tick_count_override)
** 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(tick_count_override).idiv(animation_frame_hold_time) % animation_frame_count~
- Inside source: true
*** True Line Result
        return self.elapsed_time(tick_count_override).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: ~    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: ~    def cos_r~
- Inside source: true
*** True Line Result
    def cos_r
** Processing line: ~      Math.cos self~
- Inside source: true
*** True Line Result
      Math.cos self
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def cos_d~
- Inside source: true
*** True Line Result
    def cos_d
** 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: ~    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 sin_r~
- Inside source: true
*** True Line Result
    def sin_r
** Processing line: ~      Math.sin self~
- Inside source: true
*** True Line Result
      Math.sin self
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def sin_d~
- Inside source: true
*** True Line Result
    def sin_d
** 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: ~~
- Inside source: true
*** True Line Result

** 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 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: ~    def sin_r~
- Inside source: true
*** True Line Result
    def sin_r
** Processing line: ~      Math.sin self~
- Inside source: true
*** True Line Result
      Math.sin self
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def sin_d~
- Inside source: true
*** True Line Result
    def sin_d
** 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 cos_r~
- Inside source: true
*** True Line Result
    def cos_r
** Processing line: ~      Math.cos self~
- Inside source: true
*** True Line Result
      Math.cos self
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def cos_d~
- Inside source: true
*** True Line Result
    def cos_d
** 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: ~  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_write_file~
- Inside source: true
*** True Line Result
        tick_write_file
** 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: ~                                                                write_file_queue: [],~
- Inside source: true
*** True Line Result
                                                                write_file_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: ~        local_state.http_boot_debounce ||= 0~
- Inside source: true
*** True Line Result
        local_state.http_boot_debounce ||= 0
** Processing line: ~        local_state.http_boot_debounce  -= 1~
- Inside source: true
*** True Line Result
        local_state.http_boot_debounce  -= 1
** Processing line: ~        local_state.http_boot_debounce   = local_state.http_boot_debounce.clamp(0, 120)~
- Inside source: true
*** True Line Result
        local_state.http_boot_debounce   = local_state.http_boot_debounce.clamp(0, 120)
** Processing line: ~        return if local_state.http_boot_debounce > 0~
- Inside source: true
*** True Line Result
        return if local_state.http_boot_debounce > 0
** 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: ~          local_state.http_boot_debounce = 120~
- Inside source: true
*** True Line Result
          local_state.http_boot_debounce = 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: ~      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: ~          local_state.write_file_queue << { path: file_key, text: local_state.http_file_changes[:response_data] }~
- Inside source: true
*** True Line Result
          local_state.write_file_queue << { path: file_key, text: 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: ~~
- Inside source: true
*** True Line Result

** Processing line: ~      def tick_write_file~
- Inside source: true
*** True Line Result
      def tick_write_file
** Processing line: ~        local_state.write_file_queue.each do |h|~
- Inside source: true
*** True Line Result
        local_state.write_file_queue.each do |h|
** Processing line: ~          $gtk.write_file h[:path], h[:text]~
- Inside source: true
*** True Line Result
          $gtk.write_file h[:path], h[:text]
** Processing line: ~        end~
- Inside source: true
*** True Line Result
        end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        local_state.write_file_queue.clear~
- Inside source: true
*** True Line Result
        local_state.write_file_queue.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: ~#+end_src~
- Line was 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: ~            w = s.w~
- Inside source: true
*** True Line Result
            w = s.w
** Processing line: ~            h = s.h~
- Inside source: true
*** True Line Result
            h = s.h
** Processing line: ~            if !w && !h~
- Inside source: true
*** True Line Result
            if !w && !h
** Processing line: ~              @ffi_draw.draw_triangle s.x, s.y, s.x2, s.y2, s.x3, s.y3,~
- Inside source: true
*** True Line Result
              @ffi_draw.draw_triangle s.x, s.y, s.x2, s.y2, s.x3, s.y3,
** 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: ~                                      nil, nil, nil, nil, nil, nil, nil,~
- Inside source: true
*** True Line Result
                                      nil, nil, nil, nil, nil, nil, nil,
** Processing line: ~                                      (s.blendmode_enum || 1)~
- Inside source: true
*** True Line Result
                                      (s.blendmode_enum || 1)
** Processing line: ~            else~
- Inside source: true
*** True Line Result
            else
** Processing line: ~              @ffi_draw.draw_solid_2 s.x, s.y, w, h,~
- Inside source: true
*** True Line Result
              @ffi_draw.draw_solid_2 s.x, s.y, w, 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: ~          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: ~            w = s.w~
- Inside source: true
*** True Line Result
            w = s.w
** Processing line: ~            h = s.h~
- Inside source: true
*** True Line Result
            h = s.h
** Processing line: ~            if !w && !h~
- Inside source: true
*** True Line Result
            if !w && !h
** Processing line: ~              @ffi_draw.draw_triangle s.x, s.y, s.x2, s.y2, s.x3, s.y3,~
- Inside source: true
*** True Line Result
              @ffi_draw.draw_triangle s.x, s.y, s.x2, s.y2, s.x3, s.y3,
** Processing line: ~                                      s.r || 255,~
- Inside source: true
*** True Line Result
                                      s.r || 255,
** Processing line: ~                                      s.g || 255,~
- Inside source: true
*** True Line Result
                                      s.g || 255,
** Processing line: ~                                      s.b || 255,~
- Inside source: true
*** True Line Result
                                      s.b || 255,
** Processing line: ~                                      s.a || 255,~
- Inside source: true
*** True Line Result
                                      s.a || 255,
** Processing line: ~                                      s.path || 'pixel',~
- Inside source: true
*** True Line Result
                                      s.path || 'pixel',
** Processing line: ~                                      s.source_x,~
- Inside source: true
*** True Line Result
                                      s.source_x,
** Processing line: ~                                      s.source_y,~
- Inside source: true
*** True Line Result
                                      s.source_y,
** Processing line: ~                                      s.source_x2,~
- Inside source: true
*** True Line Result
                                      s.source_x2,
** Processing line: ~                                      s.source_y2,~
- Inside source: true
*** True Line Result
                                      s.source_y2,
** Processing line: ~                                      s.source_x3,~
- Inside source: true
*** True Line Result
                                      s.source_x3,
** Processing line: ~                                      s.source_y3,~
- Inside source: true
*** True Line Result
                                      s.source_y3,
** Processing line: ~                                      (s.blendmode_enum || 1)~
- Inside source: true
*** True Line Result
                                      (s.blendmode_enum || 1)
** Processing line: ~            else~
- Inside source: true
*** True Line Result
            else
** Processing line: ~              @ffi_draw.draw_sprite_4 s.x, s.y, w, h,~
- Inside source: true
*** True Line Result
              @ffi_draw.draw_sprite_4 s.x, s.y, w, h,
** Processing line: ~                                      (s.path || 'pixel').to_s,~
- Inside source: true
*** True Line Result
                                      (s.path || 'pixel').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: ~          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: ~~
- Inside source: true
*** True Line Result

** Processing line: ~        def draw_primitive p~
- Inside source: true
*** True Line Result
        def draw_primitive p
** Processing line: ~          return unless p~
- Inside source: true
*** True Line Result
          return unless p
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~          if p.primitive_marker == :solid~
- Inside source: true
*** True Line Result
          if p.primitive_marker == :solid
** Processing line: ~            return draw_solid p~
- Inside source: true
*** True Line Result
            return draw_solid p
** Processing line: ~          elsif p.primitive_marker == :sprite~
- Inside source: true
*** True Line Result
          elsif p.primitive_marker == :sprite
** Processing line: ~            return draw_sprite p~
- Inside source: true
*** True Line Result
            return draw_sprite p
** Processing line: ~          elsif p.primitive_marker == :label~
- Inside source: true
*** True Line Result
          elsif p.primitive_marker == :label
** Processing line: ~            return draw_label p~
- Inside source: true
*** True Line Result
            return draw_label p
** Processing line: ~          elsif p.primitive_marker == :line~
- Inside source: true
*** True Line Result
          elsif p.primitive_marker == :line
** Processing line: ~            return draw_line p~
- Inside source: true
*** True Line Result
            return draw_line p
** Processing line: ~          elsif p.primitive_marker == :border~
- Inside source: true
*** True Line Result
          elsif p.primitive_marker == :border
** Processing line: ~            return draw_border p~
- Inside source: true
*** True Line Result
            return draw_border p
** Processing line: ~          else~
- Inside source: true
*** True Line Result
          else
** Processing line: ~            raise <<-S~
- Inside source: true
*** True Line Result
            raise <<-S
** Processing line: ~  * ERROR:~
- Inside source: true
*** True Line Result
  * ERROR:
** Processing line: ~  #{p}~
- Inside source: true
*** True Line Result
  #{p}
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~  I don't know how to use the above #{p.class} with SDL's FFI. Please~
- Inside source: true
*** True Line Result
  I don't know how to use the above #{p.class} with SDL's FFI. Please
** Processing line: ~  add a method on the object called ~primitive_marker~ that~
- Inside source: true
*** True Line Result
  add a method on the object called ~primitive_marker~ that
** Processing line: ~  returns :solid, :sprite, :label, :line, or :border. If the object~
- Inside source: true
*** True Line Result
  returns :solid, :sprite, :label, :line, or :border. If the object
** Processing line: ~  is a Hash, please add { primitive_marker: :PRIMITIVE_SYMBOL } to the Hash.~
- Inside source: true
*** True Line Result
  is a Hash, please add { primitive_marker: :PRIMITIVE_SYMBOL } to the Hash.
** 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: ~      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: ~  triangles:  #{@args.outputs.triangles.length}, #{@args.outputs.static_triangles.length}~
- Inside source: true
*** True Line Result
  triangles:  #{@args.outputs.triangles.length}, #{@args.outputs.static_triangles.length}
** 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/args_docs.rb',~
- Inside source: true
*** True Line Result
              'dragon/args_docs.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/runtime_docs.rb',~
- Inside source: true
*** True Line Result
              'dragon/runtime_docs.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.no_clear! render_target_name~
- Inside source: true
*** True Line Result
    def $top_level.no_clear! render_target_name
** Processing line: ~      $args.outputs[:render_target_name].clear_before_render = false~
- Inside source: true
*** True Line Result
      $args.outputs[:render_target_name].clear_before_render = false
** 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: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def $top_level.sin_r radians~
- Inside source: true
*** True Line Result
    def $top_level.sin_r radians
** Processing line: ~      Math.sin radians~
- Inside source: true
*** True Line Result
      Math.sin radians
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def $top_level.cos_r radians~
- Inside source: true
*** True Line Result
    def $top_level.cos_r radians
** Processing line: ~      Math.cos radians~
- Inside source: true
*** True Line Result
      Math.cos radians
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def $top_level.sin degrees~
- Inside source: true
*** True Line Result
    def $top_level.sin degrees
** Processing line: ~      Math.sin degrees.to_radians~
- Inside source: true
*** True Line Result
      Math.sin degrees.to_radians
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def $top_level.cos degrees~
- Inside source: true
*** True Line Result
    def $top_level.cos degrees
** Processing line: ~      Math.cos degrees.to_radians~
- Inside source: true
*** True Line Result
      Math.cos degrees.to_radians
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def $top_level.sin_d degrees~
- Inside source: true
*** True Line Result
    def $top_level.sin_d degrees
** Processing line: ~      Math.sin degrees.to_radians~
- Inside source: true
*** True Line Result
      Math.sin degrees.to_radians
** Processing line: ~    end~
- Inside source: true
*** True Line Result
    end
** Processing line: ~~
- Inside source: true
*** True Line Result

** Processing line: ~    def $top_level.cos_d degrees~
- Inside source: true
*** True Line Result
    def $top_level.cos_d degrees
** Processing line: ~      Math.cos degrees.to_radians~
- Inside source: true
*** True Line Result
      Math.cos degrees.to_radians
** Processing line: ~    end~
- Inside source: true
*** 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: ~* Starting a New DragonRuby Project~
- H1 detected.
- Determining if line is a header.
- Line contains ~* ~... gsub-ing empty string
- Formatting line: ~Starting a New DragonRuby Project~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~~
** Processing line: ~The zip file is a complete, self contained project structure. To create a new project, unzip the zip file in its entirety and use that as a starting point for another game. This is the recommended approach to starting a new project.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~The zip file is a complete, self contained project structure. To create a new project, unzip the zip file in its entirety and use that as a starting point for another game. This is the recommended approach to starting a new project.~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~~
** Processing line: ~** Rationale~
- H2 detected.
- Determining if line is a header.
- Line contains ~** ~... gsub-ing empty string
- Formatting line: ~Rationale~
- Line's tilde count is: 0
- Line contains link marker: false
- Determining if line is a header.
- Line contains ~** ~... gsub-ing empty string
- Formatting line: ~Rationale~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~~
** Processing line: ~The DRGTK binary/package in its entirety is designed to be committed with your source code (it’s why we keep it small). It’s to protect “shelf life”. 3 years from now we might be on a vastly different version of the engine. But you know that the code you’ve written will definitely work with the version that was committed to source control. It's strongly recommended that you do **not** keep DragonRuby Game Tooklit in a shared location and instead unzip a clean copy for ever game. That being said, You can optionally pass a directory when starting up DragonRuby from the terminal: ~./dragonruby ./non-defualt-game-directory~.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~The DRGTK binary/package in its entirety is designed to be committed with your source code (it’s why we keep it small). It’s to protect “shelf life”. 3 years from now we might be on a vastly different version of the engine. But you know that the code you’ve written will definitely work with the version that was committed to source control. It's strongly recommended that you do **not** keep DragonRuby Game Tooklit in a shared location and instead unzip a clean copy for ever game. That being said, You can optionally pass a directory when starting up DragonRuby from the terminal: ~./dragonruby ./non-defualt-game-directory~.~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~~
** 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's a StackOverflow Survey sorted by highest paid developers: [[https://insights.stackoverflow.com/survey/2021#section-top-paying-technologies-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's a StackOverflow Survey sorted by highest paid developers: [[https://insights.stackoverflow.com/survey/2021#section-top-paying-technologies-top-paying-technologies]].~
- Line's tilde count is: 0
- Line contains link marker: true
- LINK detected.
** 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: ~Here's a some quick demonstrations of how well DragonRuby Game Toolkit Performs:~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~Here's a some quick demonstrations of how well DragonRuby Game Toolkit Performs:~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~- [[https://youtu.be/MFR-dvsllA4]]~
- UL start detected.
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~[[https://youtu.be/MFR-dvsllA4]]~
- Line's tilde count is: 0
- Line contains link marker: true
- LINK detected.
** Processing line: ~- [[https://youtu.be/UuY7CWdvyWM]]~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~[[https://youtu.be/UuY7CWdvyWM]]~
- Line's tilde count is: 0
- Line contains link marker: true
- LINK detected.
** 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: ~*** ~args.state.*.entity_id~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.state.*.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: ~~args.state.*.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: ~*** ~args.state.*.entity_type~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.state.*.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: ~~args.state.*.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: ~*** ~args.state.*.created_at~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.state.*.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: ~~args.state.*.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: ~*** ~args.state.*.created_at_elapsed~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.state.*.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: ~~args.state.*.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: ~*** ~args.state.*.global_created_at~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.state.*.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: ~~args.state.*.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: ~*** ~args.state.*.global_created_at_elapsed~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.state.*.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: ~~args.state.*.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: ~*** ~args.state.*.as_hash~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.state.*.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: ~~args.state.*.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: ~*** ~args.state.new_entity~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.state.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: ~~args.state.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: ~*** ~args.state.new_entity_strict~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.state.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: ~~args.state.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: ~*** ~args.state.tick_count~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.state.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: ~~args.state.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: ~*** ~args.inputs.up~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.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: ~*** ~args.inputs.down~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.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: ~*** ~args.inputs.left~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.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: ~*** ~args.inputs.right~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.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: ~*** ~args.inputs.left_right~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.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: ~*** ~args.inputs.up_down~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.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: ~*** ~args.inputs.text~ OR ~args.inputs.history~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.text~ OR ~args.inputs.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: ~~args.inputs.text~ OR ~args.inputs.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: ~*** ~args.inputs.mouse~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.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: ~**** ~args.inputs.mouse.x~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.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: ~~args.inputs.mouse.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: ~**** ~args.inputs.mouse.y~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.mouse.y~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~Returns the current ~y~ 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 ~y~ location of the mouse.~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~**** ~args.inputs.mouse.inside_rect? rect~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.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: ~~args.inputs.mouse.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: ~**** ~args.inputs.mouse.inside_circle? center_point, radius~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.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: ~~args.inputs.mouse.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: ~**** ~args.inputs.mouse.moved~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.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: ~~args.inputs.mouse.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: ~**** ~args.inputs.mouse.button_left~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.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: ~~args.inputs.mouse.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: ~**** ~args.inputs.mouse.button_middle~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.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: ~~args.inputs.mouse.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: ~**** ~args.inputs.mouse.button_right~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.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: ~~args.inputs.mouse.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: ~**** ~args.inputs.mouse.button_bits~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.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: ~~args.inputs.mouse.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: ~**** ~args.inputs.mouse.wheel~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.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: ~***** ~args.inputs.mouse.wheel.x~~
- H5 detected.
- Determining if line is a header.
- Line contains ~***** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.wheel.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: ~~args.inputs.mouse.wheel.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: ~***** ~args.inputs.mouse.wheel.y~~
- H5 detected.
- Determining if line is a header.
- Line contains ~***** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.wheel.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: ~~args.inputs.mouse.wheel.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: ~**** ~args.inputs.mouse.click~ OR ~.down~, ~.previous_click~, ~.up~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.mouse.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: ~~args.inputs.mouse.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: ~*** ~args.inputs.controller_one~, ~.controller_two~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.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: ~**** ~args.inputs.controller_(one|two).up~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).down~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).left~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).right~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).left_right~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).up_down~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).(left_analog_x_raw|right_analog_x_raw)~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).(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: ~~args.inputs.controller_(one|two).(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: ~**** ~args.inputs.controller_(one|two).left_analog_y_raw|right_analog_y_raw)~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).left_analog_x_perc|right_analog_x_perc)~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).left_analog_y_perc|right_analog_y_perc)~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).directional_up~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).directional_down~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).directional_left~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).directional_right~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).(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: ~~args.inputs.controller_(one|two).(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: ~~args.inputs.controller_(one|two).(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: ~**** ~args.inputs.controller_(one|two).truthy_keys~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).key_down~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).key_held~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~**** ~args.inputs.controller_(one|two).key_up~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.controller_(one|two).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: ~~args.inputs.controller_(one|two).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: ~*** ~args.inputs.keyboard~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.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: ~~args.inputs.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: ~**** ~args.inputs.keyboard.up~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.keyboard.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: ~~args.inputs.keyboard.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: ~**** ~args.inputs.keyboard.down~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.keyboard.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: ~~args.inputs.keyboard.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: ~**** ~args.inputs.keyboard.left~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.keyboard.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: ~~args.inputs.keyboard.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: ~**** ~args.inputs.keyboard.right~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.keyboard.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: ~~args.inputs.keyboard.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: ~**** ~args.inputs.keyboard.left_right~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.keyboard.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: ~~args.inputs.keyboard.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: ~**** ~args.inputs.keyboard.up_down~~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.keyboard.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: ~~args.inputs.keyboard.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.inputs.touch~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.touch~~
- 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.touch~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~Returns a ~Hash~ representing all touch points on a touch device. This api is only available in Indie, and Pro versions.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~Returns a ~Hash~ representing all touch points on a touch device. This api is only available in Indie, and Pro versions.~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~*** ~args.inputs.finger_left~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.finger_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: ~~args.inputs.finger_left~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~Returns a ~Hash~ with ~x~ and ~y~ denoting a touch point that is on the left side of the screen. This api is only available in Indie, and Pro versions.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~Returns a ~Hash~ with ~x~ and ~y~ denoting a touch point that is on the left side of the screen. This api is only available in Indie, and Pro versions.~
- Line's tilde count is: 6
- Line contains link marker: false
- CODE detected.
** Processing line: ~*** ~args.inputs.finger_right~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.inputs.finger_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: ~~args.inputs.finger_right~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~Returns a ~Hash~ with ~x~ and ~y~ denoting a touch point that is on the right side of the screen. This api is only available in Indie, and Pro versions.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~Returns a ~Hash~ with ~x~ and ~y~ denoting a touch point that is on the right side of the screen. This api is only available in Indie, and Pro versions.~
- Line's tilde count is: 6
- 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: ~~
** 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: ~    args.outputs.solids     << [0, 0, 100, 100]~
** Processing line: ~    args.outputs.sprites    << [100, 100, 100, 100, "sprites/square/blue.png"]~
** Processing line: ~    args.outputs.labels     << [200, 200, "Hello World"]~
** Processing line: ~    args.outputs.lines      << [300, 300, 400, 400]~
** Processing line: ~  end~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~Primitives are rendered first-in, first-out. The rendering order (sorted by bottom-most to top-most):~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~Primitives are rendered first-in, first-out. The rendering order (sorted by bottom-most to top-most):~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~~
** Processing line: ~- ~triangles~~
- UL start detected.
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~triangles~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~solids~~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~solids~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~sprites~~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~sprites~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~primitives~: Accepts all render primitives. Useful when you want to bypass the default rendering orders for rendering (eg. rendering solids on top of sprites).~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~primitives~: Accepts all render primitives. Useful when you want to bypass the default rendering orders for rendering (eg. rendering solids on top of sprites).~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~labels~~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~labels~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~lines~~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~lines~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~borders~~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~borders~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~debug~: Accepts all render primitives. Use this to render primitives for debugging (production builds of your game will not render this layer).~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~debug~: Accepts all render primitives. Use this to render primitives for debugging (production builds of your game will not render this layer).~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~~
** Processing line: ~*** ~args.outputs.background_color~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.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: ~~args.outputs.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: ~*** ~args.outputs.sounds~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.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: ~~args.outputs.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: ~*** ~args.outputs.solids~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.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: ~~args.outputs.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: ~*** ~args.outputs.static_solids~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.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: ~~args.outputs.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: ~*** ~args.outputs.triangles~, ~.static_triangles~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.triangles~, ~.static_triangles~~
- 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: ~~args.outputs.triangles~, ~.static_triangles~~
- Line's tilde count is: 4
- Line contains link marker: false
- CODE detected.
** Processing line: ~Send a Primitive to this collection to render a textured triangle 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 textured triangle to the screen.~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~*** ~args.outputs.sprites~, ~.static_sprites~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.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: ~~args.outputs.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: ~*** ~args.outputs.primitives~, ~.static_primitives~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.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: ~~args.outputs.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: ~*** ~args.outputs.labels~, ~.static_labels~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.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: ~~args.outputs.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: ~*** ~args.outputs.lines~, ~.static_lines~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.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: ~~args.outputs.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: ~*** ~args.outputs.borders~, ~.static_borders~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.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: ~~args.outputs.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: ~*** ~args.outputs.debug~, ~.static_debug~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.outputs.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: ~~args.outputs.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: ~*** ~args.geometry.inside_rect? rect_1, rect_2~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.intersect_rect? rect_2, rect_2~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.scale_rect rect, x_percentage, y_percentage~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.angle_to start_point, end_point~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.angle_from start_point, end_point~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.point_inside_circle? point, circle_center_point, radius~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.center_inside_rect rect, other_rect~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.center_inside_rect_x rect, other_rect~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.center_inside_rect_y rect, other_rect~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.anchor_rect rect, anchor_x, anchor_y~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.shift_line line, x, y~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.line_y_intercept line~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.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: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.line_slope line, replace_infinity:~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.line_rise_run~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.ray_test point, line~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.line_rect line~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.line_intersect line_one, line_two~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.distance point_one, point_two~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.geometry.cubic_bezier t, a, b, c, d~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.geometry.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: ~~args.geometry.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: ~*** ~args.easing.ease start_tick, current_tick, duration, easing_functions~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.easing.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: ~~args.easing.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: ~*** ~args.easing.ease_spline start_tick, current_tick, duration, spline~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.easing.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: ~~args.easing.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: ~*** ~args.string.wrapped_lines string, max_character_length~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.string.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: ~~args.string.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: ~*** ~args.grid.name~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.grid.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: ~~args.grid.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: ~*** ~args.grid.bottom~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.grid.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: ~~args.grid.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: ~*** ~args.grid.top~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.grid.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: ~~args.grid.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: ~*** ~args.grid.left~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.grid.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: ~~args.grid.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: ~*** ~args.grid.right~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.grid.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: ~~args.grid.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: ~*** ~args.grid.rect~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.grid.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: ~~args.grid.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: ~*** ~args.grid.origin_bottom_left!~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.grid.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: ~~args.grid.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: ~*** ~args.grid.origin_center!~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.grid.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: ~~args.grid.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: ~*** ~args.grid.w~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.grid.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: ~~args.grid.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: ~*** ~args.grid.h~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.grid.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: ~~args.grid.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: ~*** ~args.gtk.argv~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.platform~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.request_quit~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.write_file path, contents~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.write_file_root~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.append_file path, contents~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.append_file_root path, contents~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.read_file path~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.parse_xml string, parse_xml_file path~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.parse_json string, parse_json_file path~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.http_get url, extra_headers = {}~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.http_post url, form_fields = {}, extra_headers = {}~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.reset~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.stop_music~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.calcstringbox str, size_enum, font~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.calcspritebox path~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.calcspritebox 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: ~~args.gtk.calcspritebox path~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~Returns a tuple with width and height of a sprite.~
- 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 sprite.~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~*** ~args.gtk.reset_sprite path~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.reset_sprite path~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~Invalidates the cache of a sprite that as already been rendered.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~Invalidates the cache of a sprite that as already been rendered.~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~*** ~args.gtk.slowmo! factor~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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. ~args.gtk.slowmo! 60~ would mean that ~tick~ will be called once per second ~(fps = factor / 60)~.~
- 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. ~args.gtk.slowmo! 60~ would mean that ~tick~ will be called once per second ~(fps = factor / 60)~.~
- Line's tilde count is: 6
- Line contains link marker: false
- CODE detected.
** Processing line: ~*** ~args.gtk.notify! string~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.system~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.exec~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.save_state~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.load_state~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.serialize_state file, state~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.deserialize_state file~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.reset_sprite path~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.show_cursor~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.hide_cursor~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.set_cursor path, dx, dy~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.cursor_shown?~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.set_window_fullscreen enabled~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.openurl url~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.get_base_dir~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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: ~*** ~args.gtk.get_game_dir~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~args.gtk.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: ~~args.gtk.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#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::Args#easing~~
- H1 detected.
- Determining if line is a header.
- Line contains ~* ~... gsub-ing empty string
- Formatting line: ~DOCS: ~GTK::Args#easing~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~~
** Processing line: ~This function will give you a float value between ~0~ and ~1~ that represents a percentage. You need to give the funcation a ~start_tick~, ~current_tick~, duration, and easing ~definitions~.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~This function will give you a float value between ~0~ and ~1~ that represents a percentage. You need to give the funcation a ~start_tick~, ~current_tick~, duration, and easing ~definitions~.~
- Line's tilde count is: 10
- Line contains link marker: false
- CODE detected.
** Processing line: ~This YouTube video is a fantastic introduction to easing functions: [[https://www.youtube.com/watch?v=mr5xkf6zSzk]]~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~This YouTube video is a fantastic introduction to easing functions: [[https://www.youtube.com/watch?v=mr5xkf6zSzk]]~
- Line's tilde count is: 0
- Line contains link marker: true
- LINK detected.
** Processing line: ~~
** Processing line: ~** Example~
- H2 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: ~This example shows how to fade in a label at frame 60 over two seconds (120 ticks). The ~:identity~ definition implies a linear fade: ~f(x) -> x~.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~This example shows how to fade in a label at frame 60 over two seconds (120 ticks). The ~:identity~ definition implies a linear fade: ~f(x) -> x~.~
- Line's tilde count is: 4
- Line contains link marker: false
- CODE detected.
** Processing line: ~~
** Processing line: ~#+begin_src~
- PRE start detected.
** Processing line: ~  def tick args~
** Processing line: ~    fade_in_at   = 60~
** Processing line: ~    current_tick = args.state.tick_count~
** Processing line: ~    duration     = 120~
** Processing line: ~    percentage   = args.easing.ease fade_in_at,~
** Processing line: ~                                    current_tick,~
** Processing line: ~                                    duration,~
** Processing line: ~                                    :identity~
** Processing line: ~    alpha = 255 * percentage~
** Processing line: ~    args.outputs.labels << { x: 640,~
** Processing line: ~                             y: 320, text: "#{percentage.to_sf}",~
** Processing line: ~                             alignment_enum: 1,~
** Processing line: ~                             a: alpha }~
** Processing line: ~  end~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~** Easing Definitions~
- H2 detected.
- Determining if line is a header.
- Line contains ~** ~... gsub-ing empty string
- Formatting line: ~Easing Definitions~
- Line'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 Definitions~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~There are a number of easing definitions availble to you:~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~There are a number of easing definitions availble to you:~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~~
** Processing line: ~*** ~:identity~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~:identity~~
- 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: ~~:identity~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~The easing definition for ~:identity~ is ~f(x) = x~. For example, if ~start_tick~ is ~0~, ~current_tick~ is ~50~, and ~duration~ is ~100~, then ~args.easing.ease 0, 50, 100, :identity~ will return ~0.5~ (since tick ~50~ is half way between ~0~ and ~100~).~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~The easing definition for ~:identity~ is ~f(x) = x~. For example, if ~start_tick~ is ~0~, ~current_tick~ is ~50~, and ~duration~ is ~100~, then ~args.easing.ease 0, 50, 100, :identity~ will return ~0.5~ (since tick ~50~ is half way between ~0~ and ~100~).~
- Line's tilde count is: 26
- Line contains link marker: false
- CODE detected.
** Processing line: ~~
** Processing line: ~*** ~:flip~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~:flip~~
- 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: ~~:flip~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~The easing definition for ~:flip~ is ~f(x) = 1 - x~. For example, if ~start_tick~ is ~0~, ~current_tick~ is ~10~, and ~duration~ is ~100~, then ~args.easing.ease 0, 10, 100, :flip~ will return ~0.9~ (since tick ~10~ means 100% - 10%).~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~The easing definition for ~:flip~ is ~f(x) = 1 - x~. For example, if ~start_tick~ is ~0~, ~current_tick~ is ~10~, and ~duration~ is ~100~, then ~args.easing.ease 0, 10, 100, :flip~ will return ~0.9~ (since tick ~10~ means 100% - 10%).~
- Line's tilde count is: 22
- Line contains link marker: false
- CODE detected.
** Processing line: ~~
** Processing line: ~*** ~:quad~, ~:cube~, ~:quart~, ~:qunit~~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~~:quad~, ~:cube~, ~:quart~, ~:qunit~~
- 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: ~~:quad~, ~:cube~, ~:quart~, ~:qunit~~
- Line's tilde count is: 8
- Line contains link marker: false
- CODE detected.
** Processing line: ~These are the power easing definitions. ~:quad~ is ~f(x) = x * x~ (~x~ squared), ~:cube~ is ~f(x) = x * x * x~  (~x~ cubed), etc.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~These are the power easing definitions. ~:quad~ is ~f(x) = x * x~ (~x~ squared), ~:cube~ is ~f(x) = x * x * x~  (~x~ cubed), etc.~
- Line's tilde count is: 12
- Line contains link marker: false
- CODE detected.
** Processing line: ~The power easing definitions represent Smooth Start easing (the percentage changes slow at first and speeds up at the end).~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~The power easing definitions represent Smooth Start easing (the percentage changes slow at first and speeds up at the end).~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~~
** Processing line: ~**** Example~
- H4 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: ~Here is an example of Smooth Start (the percentage changes slow at first and speeds up at the end).~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~Here is an example of Smooth Start (the percentage changes slow at first and speeds up at the end).~
- 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: ~    start_tick   = 60~
** Processing line: ~    current_tick = args.state.tick_count~
** Processing line: ~    duration     = 120~
** Processing line: ~    percentage   = args.easing.ease start_tick,~
** Processing line: ~                                    current_tick,~
** Processing line: ~                                    duration,~
** Processing line: ~                                    :quad~
** Processing line: ~    start_x      = 100~
** Processing line: ~    end_x        = 1180~
** Processing line: ~    distance_x   = end_x - start_x~
** Processing line: ~    final_x      = start_x + (distance_x * percentage)~
** Processing line: ~~
** Processing line: ~    start_y      = 100~
** Processing line: ~    end_y        = 620~
** Processing line: ~    distance_y   = end_y - start_y~
** Processing line: ~    final_y      = start_y + (distance_y * percentage)~
** Processing line: ~~
** Processing line: ~    args.outputs.labels << { x: final_x,~
** Processing line: ~                             y: final_y,~
** Processing line: ~                             text: "#{percentage.to_sf}",~
** Processing line: ~                             alignment_enum: 1 }~
** Processing line: ~  end~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** Combining Easing Definitions~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Combining Easing Definitions~
- Line's tilde count is: 0
- Line contains link marker: false
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Combining Easing Definitions~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~The base easing definitions can be combined to create common easing functions.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~The base easing definitions can be combined to create common easing functions.~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~~
** Processing line: ~**** Example~
- H4 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: ~Here is an example of Smooth Stop (the percentage changes fast at first and slows down at the end).~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~Here is an example of Smooth Stop (the percentage changes fast at first and slows down at the end).~
- 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: ~    start_tick   = 60~
** Processing line: ~    current_tick = args.state.tick_count~
** Processing line: ~    duration     = 120~
** Processing line: ~~
** Processing line: ~    # :flip, :quad, :flip is Smooth Stop~
** Processing line: ~    percentage   = args.easing.ease start_tick,~
** Processing line: ~                                    current_tick,~
** Processing line: ~                                    duration,~
** Processing line: ~                                    :flip, :quad, :flip~
** Processing line: ~    start_x      = 100~
** Processing line: ~    end_x        = 1180~
** Processing line: ~    distance_x   = end_x - start_x~
** Processing line: ~    final_x      = start_x + (distance_x * percentage)~
** Processing line: ~~
** Processing line: ~    start_y      = 100~
** Processing line: ~    end_y        = 620~
** Processing line: ~    distance_y   = end_y - start_y~
** Processing line: ~    final_y      = start_y + (distance_y * percentage)~
** Processing line: ~~
** Processing line: ~    args.outputs.labels << { x: final_x,~
** Processing line: ~                             y: final_y,~
** Processing line: ~                             text: "#{percentage.to_sf}",~
** Processing line: ~                             alignment_enum: 1 }~
** Processing line: ~  end~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** Custom Easing Functions~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Custom Easing Functions~
- Line's tilde count is: 0
- Line contains link marker: false
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Custom Easing Functions~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~You can define your own easing functions by passing in a ~lambda~ as a ~definition~ or extending the ~Easing~ module.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~You can define your own easing functions by passing in a ~lambda~ as a ~definition~ or extending the ~Easing~ module.~
- Line's tilde count is: 6
- Line contains link marker: false
- CODE detected.
** Processing line: ~~
** Processing line: ~**** Example - Using Lambdas~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~Example - Using Lambdas~
- Line'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 - Using Lambdas~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~This easing function goes from ~0~ to ~1~ for the first half of the ease, then ~1~ to ~0~ for the second half of the ease.~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~This easing function goes from ~0~ to ~1~ for the first half of the ease, then ~1~ to ~0~ for the second half of the ease.~
- Line's tilde count is: 8
- Line contains link marker: false
- CODE detected.
** Processing line: ~~
** Processing line: ~#+begin_src~
- PRE start detected.
** Processing line: ~  def tick args~
** Processing line: ~    fade_in_at    = 60~
** Processing line: ~    current_tick  = args.state.tick_count~
** Processing line: ~    duration      = 600~
** Processing line: ~    easing_lambda = lambda do |percentage, start_tick, duration|~
** Processing line: ~                      fx = percentage~
** Processing line: ~                      if fx < 0.5~
** Processing line: ~                        fx = percentage * 2~
** Processing line: ~                      else~
** Processing line: ~                        fx = 1 - (percentage - 0.5) * 2~
** Processing line: ~                      end~
** Processing line: ~                      fx~
** Processing line: ~                    end~
** Processing line: ~~
** Processing line: ~    percentage    = args.easing.ease fade_in_at,~
** Processing line: ~                                     current_tick,~
** Processing line: ~                                     duration,~
** Processing line: ~                                     easing_lambda~
** Processing line: ~~
** Processing line: ~    alpha = 255 * percentage~
** Processing line: ~    args.outputs.labels << { x: 640,~
** Processing line: ~                             y: 320,~
** Processing line: ~                             a: alpha,~
** Processing line: ~                             text: "#{percentage.to_sf}",~
** Processing line: ~                             alignment_enum: 1 }~
** Processing line: ~  end~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~**** Example - Extending Easing Definitions~
- H4 detected.
- Determining if line is a header.
- Line contains ~**** ~... gsub-ing empty string
- Formatting line: ~Example - Extending Easing Definitions~
- Line'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 - Extending Easing Definitions~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~If you don't want to create a lambda, you can register an easing definition like so:~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~If you don't want to create a lambda, you can register an easing definition like so:~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~~
** Processing line: ~#+begin_src~
- PRE start detected.
** Processing line: ~  # 1. Extend the Easing module~
** Processing line: ~  module Easing~
** Processing line: ~    def self.saw_tooth x~
** Processing line: ~      if x < 0.5~
** Processing line: ~        x * 2~
** Processing line: ~      else~
** Processing line: ~        1 - (x - 0.5) * 2~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    fade_in_at    = 60~
** Processing line: ~    current_tick  = args.state.tick_count~
** Processing line: ~    duration      = 600~
** Processing line: ~~
** Processing line: ~    # 2. Reference easing definition by name~
** Processing line: ~    percentage    = args.easing.ease fade_in_at,~
** Processing line: ~                                     current_tick,~
** Processing line: ~                                     duration,~
** Processing line: ~                                     :saw_tooth~
** Processing line: ~~
** Processing line: ~    alpha = 255 * percentage~
** Processing line: ~    args.outputs.labels << { x: 640,~
** Processing line: ~                             y: 320,~
** Processing line: ~                             a: alpha,~
** Processing line: ~                             text: "#{percentage.to_sf}",~
** Processing line: ~                             alignment_enum: 1 }~
** 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: ~    args.outputs.solids     << [0, 0, 100, 100]~
** Processing line: ~    args.outputs.sprites    << [100, 100, 100, 100, "sprites/square/blue.png"]~
** Processing line: ~    args.outputs.labels     << [200, 200, "Hello World"]~
** Processing line: ~    args.outputs.lines      << [300, 300, 400, 400]~
** Processing line: ~  end~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~Primitives are rendered first-in, first-out. The rendering order (sorted by bottom-most to top-most):~
- P detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~Primitives are rendered first-in, first-out. The rendering order (sorted by bottom-most to top-most):~
- Line's tilde count is: 0
- Line contains link marker: false
** Processing line: ~~
** Processing line: ~- ~solids~~
- UL start detected.
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~solids~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~sprites~~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~sprites~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~primitives~: Accepts all render primitives. Useful when you want to bypass the default rendering orders for rendering (eg. rendering solids on top of sprites).~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~primitives~: Accepts all render primitives. Useful when you want to bypass the default rendering orders for rendering (eg. rendering solids on top of sprites).~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~labels~~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~labels~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~lines~~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~lines~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~borders~~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~borders~~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** Processing line: ~- ~debug~: Accepts all render primitives. Use this to render primitives for debugging (production builds of your game will not render this layer).~
- LI detected.
- Determining if line is a header.
- Line does not appear to be a header.
- Formatting line: ~~debug~: Accepts all render primitives. Use this to render primitives for debugging (production builds of your game will not render this layer).~
- Line's tilde count is: 2
- Line contains link marker: false
- CODE detected.
** 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!", "puts "~
** 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, not_message = nil~
** Processing line: ~    console.log~
** Processing line: ~           .map(&:upcase)~
** Processing line: ~           .reject { |s| not_message && s.include?(not_message.upcase) }~
** Processing line: ~           .any?   { |s| s.include?("#{message.upcase}") }~
** 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<xmin) ? xmin : @x;~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render args~
** Processing line: ~      args.outputs.solids << [@x,@y,@width,@height,255,0,0];~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def rect~
** Processing line: ~      [@x, @y, @width, @height]~
** 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 - rectangle.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Physics And Collisions - Arbitrary Collision - rectangle.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 - rectangle.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/rectangle.rb~
** Processing line: ~  class Rectangle~
** Processing line: ~    def initialize args~
** Processing line: ~~
** Processing line: ~      @image = "sprites/roundSquare_white.png"~
** Processing line: ~      @width  = 160.0~
** Processing line: ~      @height = 80.0~
** Processing line: ~      @x=$args.grid.right/2.0 - @width/2.0~
** Processing line: ~      @y=$args.grid.top/2.0 - @height/2.0~
** Processing line: ~~
** Processing line: ~      @xtmp = @width  * (1.0/10.0)~
** Processing line: ~      @ytmp = @height * (1.0/10.0)~
** Processing line: ~~
** Processing line: ~      #ball0 = args.state.balls[0]~
** Processing line: ~      #hypotenuse = (args.state.balls[0].width**2 + args.state.balls[0].height**2)**0.5~
** Processing line: ~      hypotenuse=args.state.ball_hypotenuse~
** Processing line: ~      @boldXY = {x:(@x-hypotenuse/2)-1, y:(@y-hypotenuse/2)-1}~
** Processing line: ~      @boldWidth = @width + hypotenuse + 2~
** Processing line: ~      @boldHeight = @height + hypotenuse + 2~
** Processing line: ~      @bold = [(@x-hypotenuse/2)-1,(@y-hypotenuse/2)-1,@width + hypotenuse + 2,@height + hypotenuse + 2]~
** Processing line: ~~
** Processing line: ~~
** Processing line: ~      @points = [~
** Processing line: ~        {x:@x,        y:@y+@ytmp},~
** Processing line: ~        {x:@x+@xtmp,        y:@y},~
** Processing line: ~        {x:@x+@width-@xtmp, y:@y},~
** Processing line: ~        {x:@x+@width, y:@y+@ytmp},~
** Processing line: ~        {x:@x+@width, y:@y+@height-@ytmp},#~
** Processing line: ~        {x:@x+@width-@xtmp, y:@y+@height},~
** Processing line: ~        {x:@x+@xtmp,        y:@y+@height},~
** Processing line: ~        {x:@x,        y:@y+@height-@ytmp}~
** Processing line: ~      ]~
** Processing line: ~~
** Processing line: ~      @colliders = []~
** Processing line: ~      #i = 0~
** Processing line: ~      #while i < @points.length-1~
** Processing line: ~        #@colliders.append(LinearCollider.new(@points[i],@points[i+1],:pos))~
** Processing line: ~        #i+=1~
** Processing line: ~      #end~
** Processing line: ~      @colliders.append(LinearCollider.new(@points[0],@points[1], :neg))~
** Processing line: ~      @colliders.append(LinearCollider.new(@points[1],@points[2], :neg))~
** Processing line: ~      @colliders.append(LinearCollider.new(@points[2],@points[3], :neg))~
** Processing line: ~      @colliders.append(LinearCollider.new(@points[3],@points[4], :neg))~
** Processing line: ~      @colliders.append(LinearCollider.new(@points[4],@points[5], :pos))~
** Processing line: ~      @colliders.append(LinearCollider.new(@points[5],@points[6], :pos))~
** Processing line: ~      @colliders.append(LinearCollider.new(@points[6],@points[7], :pos))~
** Processing line: ~      @colliders.append(LinearCollider.new(@points[0],@points[7], :pos))~
** Processing line: ~~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def update args~
** Processing line: ~~
** Processing line: ~      for b in args.state.balls~
** Processing line: ~        if [b.x, b.y, b.width, b.height].intersect_rect?(@bold)~
** Processing line: ~          for c in @colliders~
** Processing line: ~            if c.collision?(args, b.getPoints(args),b)~
** Processing line: ~              c.collide args, b~
** Processing line: ~            end~
** Processing line: ~          end~
** Processing line: ~        end~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def draw args~
** Processing line: ~      args.outputs.sprites << [~
** Processing line: ~        @x,                                       # X~
** Processing line: ~        @y,                                       # Y~
** Processing line: ~        @width,                                   # W~
** Processing line: ~        @height,                                  # H~
** Processing line: ~        @image,                                   # PATH~
** Processing line: ~        0,                                        # ANGLE~
** Processing line: ~        255,                                      # ALPHA~
** Processing line: ~        219,                                      # RED_SATURATION~
** Processing line: ~        112,                                      # GREEN_SATURATION~
** Processing line: ~        147                                       # BLUE_SATURATION~
** Processing line: ~      ]~
** Processing line: ~      #args.outputs.sprites << [@x, @y, @width, @height, "sprites/roundSquare_small_black.png"]~
** 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 - square_collider.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Physics And Collisions - Arbitrary Collision - square_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 - square_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/square_collider.rb~
** Processing line: ~~
** Processing line: ~  class SquareCollider~
** Processing line: ~    def initialize x,y,direction,size=COLLISIONWIDTH~
** Processing line: ~      @x = x~
** Processing line: ~      @y = y~
** Processing line: ~      @size = size~
** Processing line: ~      @direction = direction~
** Processing line: ~~
** Processing line: ~    end~
** Processing line: ~    def collision? args, ball~
** Processing line: ~      #args.outputs.solids <<  [@x, @y, @size, @size,     000, 255, 255]~
** Processing line: ~~
** Processing line: ~~
** Processing line: ~      return [@x,@y,@size,@size].intersect_rect?([ball.x,ball.y,ball.width,ball.height])~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def collide args, ball~
** Processing line: ~      vmag = (ball.velocity.x**2.0 +ball.velocity.y**2.0)**0.5~
** Processing line: ~      a = ((2.0**0.5)*vmag)/2.0~
** Processing line: ~      if vmag < MAX_VELOCITY~
** Processing line: ~        ball.velocity.x = (a) * @direction.x * 1.1~
** Processing line: ~        ball.velocity.y = (a) * @direction.y * 1.1~
** Processing line: ~      else~
** Processing line: ~        ball.velocity.x = (a) * @direction.x~
** Processing line: ~        ball.velocity.y = (a) * @direction.y~
** 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 - vector2d.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Physics And Collisions - Arbitrary 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 - Arbitrary 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/09_arbitrary_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 - Collision With Object Removal - ball.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Physics And Collisions - Collision With Object Removal - 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 - Collision With Object Removal - 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/10_collision_with_object_removal/app/ball.rb~
** Processing line: ~  class Ball~
** Processing line: ~    #TODO limit accessors?~
** Processing line: ~    attr_accessor :xy, :width, :height, :velocity~
** Processing line: ~~
** Processing line: ~~
** Processing line: ~    #@xy [Vector2d] x,y position~
** Processing line: ~    #@velocity [Vector2d] velocity of ball~
** Processing line: ~    def initialize~
** Processing line: ~      @xy = Vector2d.new(WIDTH/2,500)~
** Processing line: ~      @velocity = Vector2d.new(4,-4)~
** Processing line: ~      @width =  20~
** Processing line: ~      @height = 20~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    #move the ball according to its velocity~
** Processing line: ~    def update args~
** Processing line: ~      @xy.x+=@velocity.x~
** Processing line: ~      @xy.y+=@velocity.y~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    #render the ball to the screen~
** Processing line: ~    def render args~
** Processing line: ~      args.outputs.solids << [@xy.x,@xy.y,@width,@height,255,0,255];~
** Processing line: ~      #args.outputs.labels << [20,HEIGHT-50,"velocity: " +@velocity.x.to_s+","+@velocity.y.to_s + "   magnitude:" + @velocity.mag.to_s]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def rect~
** Processing line: ~      [@xy.x,@xy.y,@width,@height]~
** Processing line: ~    end~
** 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 - linear_collider.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Physics And Collisions - Collision With Object Removal - 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 - Collision With Object Removal - 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/10_collision_with_object_removal/app/linear_collider.rb~
** Processing line: ~  #The LinearCollider (theoretically) produces collisions upon a line segment defined point.y two x,y cordinates~
** Processing line: ~~
** Processing line: ~  class LinearCollider~
** Processing line: ~~
** Processing line: ~    #start [Array of length 2] start of the line segment as a x,y cordinate~
** Processing line: ~    #last [Array of length 2] end of the line segment as a x,y cordinate~
** Processing line: ~~
** Processing line: ~    #inorder for the LinearCollider to be functional the line segment must be said to have a thickness~
** Processing line: ~    #(as it is unlikly that a colliding object will land exactly on the linesegment)~
** Processing line: ~~
** Processing line: ~    #extension defines if the line's thickness extends negatively or positively~
** Processing line: ~    #extension :pos     extends positively~
** Processing line: ~    #extension :neg     extends negatively~
** Processing line: ~~
** Processing line: ~    #thickness [float] how thick the line should be (should always be atleast as large as the magnitude of the colliding object)~
** Processing line: ~    def initialize (pointA, pointB, extension=:neg, thickness=10)~
** Processing line: ~      @pointA = pointA~
** Processing line: ~      @pointB = pointB~
** Processing line: ~      @thickness = thickness~
** Processing line: ~      @extension = extension~
** Processing line: ~~
** Processing line: ~      @pointAExtended={~
** Processing line: ~        x: @pointA.x + @thickness*(@extension == :neg ? -1 : 1),~
** Processing line: ~        y: @pointA.y + @thickness*(@extension == :neg ? -1 : 1)~
** Processing line: ~      }~
** Processing line: ~      @pointBExtended={~
** Processing line: ~        x: @pointB.x + @thickness*(@extension == :neg ? -1 : 1),~
** Processing line: ~        y: @pointB.y + @thickness*(@extension == :neg ? -1 : 1)~
** Processing line: ~      }~
** Processing line: ~~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def resetPoints(pointA,pointB)~
** Processing line: ~      @pointA = pointA~
** Processing line: ~      @pointB = pointB~
** Processing line: ~~
** Processing line: ~      @pointAExtended={~
** Processing line: ~        x:@pointA.x + @thickness*(@extension == :neg ? -1 : 1),~
** Processing line: ~        y:@pointA.y + @thickness*(@extension == :neg ? -1 : 1)~
** Processing line: ~      }~
** Processing line: ~      @pointBExtended={~
** Processing line: ~        x:@pointB.x + @thickness*(@extension == :neg ? -1 : 1),~
** Processing line: ~        y:@pointB.y + @thickness*(@extension == :neg ? -1 : 1)~
** Processing line: ~      }~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    #TODO: Ugly function~
** Processing line: ~    def slope (pointA, pointB)~
** Processing line: ~      return (pointB.x==pointA.x) ? INFINITY : (pointB.y+-pointA.y)/(pointB.x+-pointA.x)~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    #TODO: Ugly function~
** Processing line: ~    def intercept(pointA, pointB)~
** Processing line: ~      if (slope(pointA, pointB) == INFINITY)~
** Processing line: ~        -INFINITY~
** Processing line: ~      elsif slope(pointA, pointB) == -1*INFINITY~
** Processing line: ~        INFINITY~
** Processing line: ~      else~
** Processing line: ~        pointA.y+-1.0*(slope(pointA, pointB)*pointA.x)~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calcY(pointA, pointB, x)~
** Processing line: ~      return slope(pointA, pointB)*x + intercept(pointA, pointB)~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    #test if a collision has occurred~
** Processing line: ~    def isCollision? (point)~
** Processing line: ~      #INFINITY slop breaks down when trying to determin collision, ergo it requires a special test~
** Processing line: ~      if slope(@pointA, @pointB) ==  INFINITY &&~
** Processing line: ~        point.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<xmin) ? xmin : @x;~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render args~
** Processing line: ~      args.outputs.solids << [@x,@y,@width,@height,255,0,0];~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def rect~
** Processing line: ~      [@x, @y, @width, @height]~
** 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 - tests.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Physics And Collisions - Collision With Object Removal - 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: ~Physics And Collisions - Collision With Object Removal - 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/04_physics_and_collisions/10_collision_with_object_removal/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: ~*** Physics And Collisions - Collision With Object Removal - vector2d.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Physics And Collisions - Collision With Object Removal - 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 - Collision With Object Removal - 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/10_collision_with_object_removal/app/vector2d.rb~
** Processing line: ~~
** 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: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** Mouse - Mouse Click - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Mouse - Mouse Click - 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 Click - 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/01_mouse_click/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: ~   - product: Returns an array of all combinations of elements from all arrays.~
** Processing line: ~~
** Processing line: ~     For example, [1,2].product([1,2]) would return the following array...~
** Processing line: ~     [[1,1], [1,2], [2,1], [2,2]]~
** Processing line: ~     More than two arrays can be given to product and it will still work,~
** Processing line: ~     such as [1,2].product([1,2],[3,4]). What would product return in this case?~
** Processing line: ~~
** Processing line: ~     Answer:~
** Processing line: ~     [[1,1,3],[1,1,4],[1,2,3],[1,2,4],[2,1,3],[2,1,4],[2,2,3],[2,2,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: ~   - yield: Allows you to call a method with a code block and yield to that block.~
** Processing line: ~~
** Processing line: ~   Reminders:~
** Processing line: ~~
** Processing line: ~   - ARRAY#inside_rect?: Returns true or false depending on if the point is inside the rect.~
** 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.inputs.mouse.click: This property will be set if the mouse was clicked.~
** Processing line: ~~
** Processing line: ~   - Ternary operator (?): Will evaluate a statement (just like an if statement)~
** Processing line: ~     and perform an action if the result is true or another action if it is false.~
** Processing line: ~~
** Processing line: ~   - reject: Removes elements from a collection if they meet certain requirements.~
** Processing line: ~~
** Processing line: ~   - args.outputs.borders: An array. The values generate a border.~
** Processing line: ~     The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE]~
** Processing line: ~     For more information about borders, 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.~
** Processing line: ~~
** Processing line: ~  =end~
** Processing line: ~~
** Processing line: ~  # This sample app is a classic game of Tic Tac Toe.~
** Processing line: ~~
** Processing line: ~  class TicTacToe~
** Processing line: ~    attr_accessor :_, :state, :outputs, :inputs, :grid, :gtk~
** Processing line: ~~
** Processing line: ~    # Starts the game with player x's turn and creates an array (to_a) for space combinations.~
** Processing line: ~    # Calls methods necessary for the game to run properly.~
** Processing line: ~    def tick~
** Processing line: ~      init_new_game~
** Processing line: ~      render_board~
** Processing line: ~      input_board~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def init_new_game~
** Processing line: ~      state.current_turn       ||= :x~
** Processing line: ~      state.space_combinations ||= [-1, 0, 1].product([-1, 0, 1]).to_a~
** Processing line: ~~
** Processing line: ~      state.spaces             ||= {}~
** Processing line: ~~
** Processing line: ~      state.space_combinations.each do |x, y|~
** Processing line: ~        state.spaces[x]    ||= {}~
** Processing line: ~        state.spaces[x][y] ||= state.new_entity(:space)~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Uses borders to create grid squares for the game's board. Also outputs the game pieces using labels.~
** Processing line: ~    def render_board~
** Processing line: ~      square_size = 80~
** Processing line: ~~
** Processing line: ~      # Positions the game's board in the center of the screen.~
** Processing line: ~      # Try removing what follows grid.w_half or grid.h_half and see how the position changes!~
** Processing line: ~      board_left = grid.w_half - square_size * 1.5~
** Processing line: ~      board_top  = grid.h_half - square_size * 1.5~
** Processing line: ~~
** Processing line: ~      # At first glance, the add(1) looks pretty trivial. But if you remove it,~
** Processing line: ~      # you'll see that the positioning of the board would be skewed without it!~
** Processing line: ~      # Or if you put 2 in the parenthesis, the pieces will be placed in the wrong squares~
** Processing line: ~      # due to the change in board placement.~
** Processing line: ~      outputs.borders << all_spaces do |x, y, space| # outputs borders for all board spaces~
** Processing line: ~        space.border ||= [~
** Processing line: ~          board_left + x.add(1) * square_size, # space.border is initialized using this definition~
** Processing line: ~          board_top  + y.add(1) * square_size,~
** Processing line: ~          square_size,~
** Processing line: ~          square_size~
** Processing line: ~        ]~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      # Again, the calculations ensure that the piece is placed in the center of the grid square.~
** Processing line: ~      # Remove the '- 20' and the piece will be placed at the top of the grid square instead of the center.~
** Processing line: ~      outputs.labels << filled_spaces do |x, y, space| # put label in each filled space of board~
** Processing line: ~            label board_left + x.add(1) * square_size + square_size.fdiv(2),~
** Processing line: ~            board_top  + y.add(1) * square_size + square_size - 20,~
** Processing line: ~            space.piece # text of label, either "x" or "o"~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      # Uses a label to output whether x or o won, or if a draw occurred.~
** Processing line: ~      # If the game is ongoing, a label shows whose turn it currently is.~
** Processing line: ~      outputs.labels << if state.x_won~
** Processing line: ~                          label grid.w_half, grid.top - 80, "x won" # the '-80' positions the label 80 pixels lower than top~
** Processing line: ~                        elsif state.o_won~
** Processing line: ~                          label grid.w_half, grid.top - 80, "o won" # grid.w_half positions the label in the center horizontally~
** Processing line: ~                        elsif state.draw~
** Processing line: ~                          label grid.w_half, grid.top - 80, "a draw"~
** Processing line: ~                        else # if no one won and the game is ongoing~
** Processing line: ~                          label grid.w_half, grid.top - 80, "turn: #{state.current_turn}"~
** Processing line: ~                        end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Calls the methods responsible for handling user input and determining the winner.~
** Processing line: ~    # Does nothing unless the mouse is clicked.~
** Processing line: ~    def input_board~
** Processing line: ~      return unless inputs.mouse.click~
** Processing line: ~      input_place_piece~
** Processing line: ~      input_restart_game~
** Processing line: ~      determine_winner~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Handles user input for placing pieces on the board.~
** Processing line: ~    def input_place_piece~
** Processing line: ~      return if state.game_over~
** Processing line: ~~
** Processing line: ~      # Checks to find the space that the mouse was clicked inside of, and makes sure the space does not already~
** Processing line: ~      # have a piece in it.~
** Processing line: ~      __, __, space = all_spaces.find do |__, __, space|~
** Processing line: ~        inputs.mouse.click.point.inside_rect?(space.border) && !space.piece~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      # The piece that goes into the space belongs to the player whose turn it currently is.~
** Processing line: ~      return unless space~
** Processing line: ~      space.piece = state.current_turn~
** Processing line: ~~
** Processing line: ~      # This ternary operator statement allows us to change the current player's turn.~
** Processing line: ~      # If it is currently x's turn, it becomes o's turn. If it is not x's turn, it become's x's turn.~
** Processing line: ~      state.current_turn = state.current_turn == :x ? :o : :x~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Resets the game.~
** Processing line: ~    def input_restart_game~
** Processing line: ~      return unless state.game_over~
** Processing line: ~      gtk.reset~
** Processing line: ~      init_new_game~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Checks if x or o won the game.~
** Processing line: ~    # If neither player wins and all nine squares are filled, a draw happens.~
** Processing line: ~    # Once a player is chosen as the winner or a draw happens, the game is over.~
** Processing line: ~    def determine_winner~
** Processing line: ~      state.x_won = won? :x # evaluates to either true or false (boolean values)~
** Processing line: ~      state.o_won = won? :o~
** Processing line: ~      state.draw = true if filled_spaces.length == 9 && !state.x_won && !state.o_won~
** Processing line: ~      state.game_over = state.x_won || state.o_won || state.draw~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Determines if a player won by checking if there is a horizontal match or vertical match.~
** Processing line: ~    # Horizontal_match and vertical_match have boolean values. If either is true, the game has been won.~
** Processing line: ~    def won? piece~
** Processing line: ~      # performs action on all space combinations~
** Processing line: ~      won = [[-1, 0, 1]].product([-1, 0, 1]).map do |xs, y|~
** Processing line: ~~
** Processing line: ~        # Checks if the 3 grid spaces with the same y value (or same row) and~
** Processing line: ~        # x values that are next to each other have pieces that belong to the same player.~
** Processing line: ~        # Remember, the value of piece is equal to the current turn (which is the player).~
** Processing line: ~        horizontal_match = state.spaces[xs[0]][y].piece == piece &&~
** Processing line: ~                           state.spaces[xs[1]][y].piece == piece &&~
** Processing line: ~                           state.spaces[xs[2]][y].piece == piece~
** Processing line: ~~
** Processing line: ~        # Checks if the 3 grid spaces with the same x value (or same column) and~
** Processing line: ~        # y values that are next to each other have pieces that belong to the same player.~
** Processing line: ~        # The && represents an "and" statement: if even one part of the statement is false,~
** Processing line: ~        # the entire statement evaluates to false.~
** Processing line: ~        vertical_match = state.spaces[y][xs[0]].piece == piece &&~
** Processing line: ~                         state.spaces[y][xs[1]].piece == piece &&~
** Processing line: ~                         state.spaces[y][xs[2]].piece == piece~
** Processing line: ~~
** Processing line: ~        horizontal_match || vertical_match # if either is true, true is returned~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      # Sees if there is a diagonal match, starting from the bottom left and ending at the top right.~
** Processing line: ~      # Is added to won regardless of whether the statement is true or false.~
** Processing line: ~      won << (state.spaces[-1][-1].piece == piece && # bottom left~
** Processing line: ~              state.spaces[ 0][ 0].piece == piece && # center~
** Processing line: ~              state.spaces[ 1][ 1].piece == piece)   # top right~
** Processing line: ~~
** Processing line: ~      # Sees if there is a diagonal match, starting at the bottom right and ending at the top left~
** Processing line: ~      # and is added to won.~
** Processing line: ~      won << (state.spaces[ 1][-1].piece == piece && # bottom right~
** Processing line: ~              state.spaces[ 0][ 0].piece == piece && # center~
** Processing line: ~              state.spaces[-1][ 1].piece == piece)   # top left~
** Processing line: ~~
** Processing line: ~      # Any false statements (meaning false diagonal matches) are rejected from won~
** Processing line: ~      won.reject_false.any?~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Defines filled spaces on the board by rejecting all spaces that do not have game pieces in them.~
** Processing line: ~    # The ! before a statement means "not". For example, we are rejecting any space combinations that do~
** Processing line: ~    # NOT have pieces in them.~
** Processing line: ~    def filled_spaces~
** Processing line: ~      state.space_combinations~
** Processing line: ~        .reject { |x, y| !state.spaces[x][y].piece } # reject spaces with no pieces in them~
** Processing line: ~        .map do |x, y|~
** Processing line: ~          if block_given?~
** Processing line: ~            yield x, y, state.spaces[x][y]~
** Processing line: ~          else~
** Processing line: ~            [x, y, state.spaces[x][y]] # sets definition of space~
** Processing line: ~          end~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Defines all spaces on the board.~
** Processing line: ~    def all_spaces~
** Processing line: ~      if !block_given?~
** Processing line: ~        state.space_combinations.map do |x, y|~
** Processing line: ~          [x, y, state.spaces[x][y]] # sets definition of space~
** Processing line: ~        end~
** Processing line: ~      else # if a block is given (block_given? is true)~
** Processing line: ~        state.space_combinations.map do |x, y|~
** Processing line: ~          yield x, y, state.spaces[x][y] # yield if a block is given~
** Processing line: ~        end~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Sets values for a label, such as the position, value, size, alignment, and color.~
** Processing line: ~    def label x, y, value~
** Processing line: ~      [x, y + 10, value, 20, 1, 0, 0, 0]~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  $tic_tac_toe = TicTacToe.new~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    $tic_tac_toe._       = args~
** Processing line: ~    $tic_tac_toe.state   = args.state~
** Processing line: ~    $tic_tac_toe.outputs = args.outputs~
** Processing line: ~    $tic_tac_toe.inputs  = args.inputs~
** Processing line: ~    $tic_tac_toe.grid    = args.grid~
** Processing line: ~    $tic_tac_toe.gtk     = args.gtk~
** Processing line: ~    $tic_tac_toe.tick~
** Processing line: ~    tick_instructions args, "Sample app shows how to work with mouse clicks."~
** 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 - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Mouse - Mouse Move - 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 - 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/02_mouse_move/app/main.rb~
** Processing line: ~  =begin~
** Processing line: ~~
** Processing line: ~   Reminders:~
** 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: ~   - find_all: Finds all elements of a collection that meet certain requirements.~
** Processing line: ~     For example, in this sample app, we're using find_all to find all zombies that have intersected~
** Processing line: ~     or hit the player's sprite since these zombies have been killed.~
** Processing line: ~~
** Processing line: ~   - args.inputs.keyboard.key_down.KEY: Determines if a key is being held or pressed.~
** Processing line: ~     Stores the frame the "down" event occurred.~
** Processing line: ~     For more information about the keyboard, go to mygame/documentation/06-keyboard.md.~
** 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.state.new_entity: Used when we want to create a new object, like a sprite or button.~
** Processing line: ~     When we want to create a new object, we can declare it as a new entity and then define~
** Processing line: ~     its properties. (Remember, you can use state to define ANY property and it will~
** Processing line: ~     be retained across frames.)~
** 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: ~   - 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: ~   - sample: Chooses a random element from the array.~
** Processing line: ~~
** Processing line: ~   - reject: Removes elements that meet certain requirements.~
** Processing line: ~     In this sample app, we're removing/rejecting zombies that reach the center of the screen. We're also~
** Processing line: ~     rejecting zombies that were killed more than 30 frames ago.~
** Processing line: ~~
** Processing line: ~  =end~
** Processing line: ~~
** Processing line: ~  # This sample app allows users to move around the screen in order to kill zombies. Zombies appear from every direction so the goal~
** Processing line: ~  # is to kill the zombies as fast as possible!~
** Processing line: ~~
** Processing line: ~  class ProtectThePuppiesFromTheZombies~
** Processing line: ~    attr_accessor :grid, :inputs, :state, :outputs~
** Processing line: ~~
** Processing line: ~    # Calls the methods necessary for the 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: ~    # Sets default values for the zombies and for the player.~
** Processing line: ~    # Initialization happens only in the first frame.~
** Processing line: ~    def defaults~
** Processing line: ~      state.flash_at               ||= 0~
** Processing line: ~      state.zombie_min_spawn_rate  ||= 60~
** Processing line: ~      state.zombie_spawn_countdown ||= random_spawn_countdown state.zombie_min_spawn_rate~
** Processing line: ~      state.zombies                ||= []~
** Processing line: ~      state.killed_zombies         ||= []~
** Processing line: ~~
** Processing line: ~      # Declares player as a new entity and sets its properties.~
** Processing line: ~      # The player begins the game in the center of the screen, not moving in any direction.~
** Processing line: ~      state.player ||= state.new_entity(:player, { x: 640,~
** Processing line: ~                                                 y: 360,~
** Processing line: ~                                                 attack_angle: 0,~
** Processing line: ~                                                 dx: 0,~
** Processing line: ~                                                 dy: 0 })~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Outputs a gray background.~
** Processing line: ~    # Calls the methods needed to output the player, zombies, etc onto the screen.~
** Processing line: ~    def render~
** Processing line: ~      outputs.solids << [grid.rect, 100, 100, 100]~
** Processing line: ~      render_zombies~
** Processing line: ~      render_killed_zombies~
** Processing line: ~      render_player~
** Processing line: ~      render_flash~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Outputs the zombies on the screen and sets values for the sprites, such as the position, width, height, and animation.~
** Processing line: ~    def render_zombies~
** Processing line: ~      outputs.sprites << state.zombies.map do |z| # performs action on all zombies in the collection~
** Processing line: ~        z.sprite = [z.x, z.y, 4 * 3, 8 * 3, animation_sprite(z)].sprite # sets definition for sprite, calls animation_sprite method~
** Processing line: ~        z.sprite~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Outputs sprites of killed zombies, and displays a slash image to show that a zombie has been killed.~
** Processing line: ~    def render_killed_zombies~
** Processing line: ~      outputs.sprites << state.killed_zombies.map do |z| # performs action on all killed zombies in collection~
** Processing line: ~        z.sprite = [z.x,~
** Processing line: ~                    z.y,~
** Processing line: ~                    4 * 3,~
** Processing line: ~                    8 * 3,~
** Processing line: ~                    animation_sprite(z, z.death_at), # calls animation_sprite method~
** Processing line: ~                    0, # angle~
** Processing line: ~                    255 * z.death_at.ease(30, :flip)].sprite # transparency of a zombie changes when they die~
** Processing line: ~                    # change the value of 30 and see what happens when a zombie is killed~
** Processing line: ~~
** Processing line: ~        # Sets values to output the slash over the zombie's sprite when a zombie is killed.~
** Processing line: ~        # The slash is tilted 45 degrees from the angle of the player's attack.~
** Processing line: ~        # Change the 3 inside scale_rect to 30 and the slash will be HUGE! Scale_rect positions~
** Processing line: ~        # the slash over the killed zombie's sprite.~
** Processing line: ~        [z.sprite, [z.sprite.rect, 'sprites/slash.png', 45 + state.player.attack_angle_on_click, z.sprite.a].scale_rect(3, 0.5, 0.5)]~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Outputs the player sprite using the images in the sprites folder.~
** Processing line: ~    def render_player~
** Processing line: ~      state.player_sprite = [state.player.x,~
** Processing line: ~                             state.player.y,~
** Processing line: ~                            4 * 3,~
** Processing line: ~                            8 * 3, "sprites/player-#{animation_index(state.player.created_at_elapsed)}.png"] # string interpolation~
** Processing line: ~      outputs.sprites << state.player_sprite~
** Processing line: ~~
** Processing line: ~      # Outputs a small red square that previews the angles that the player can attack in.~
** Processing line: ~      # It can be moved in a perfect circle around the player to show possible movements.~
** Processing line: ~      # Change the 60 in the parenthesis and see what happens to the movement of the red square.~
** Processing line: ~      outputs.solids <<  [state.player.x + state.player.attack_angle.vector_x(60),~
** Processing line: ~                          state.player.y + state.player.attack_angle.vector_y(60),~
** Processing line: ~                          3, 3, 255, 0, 0]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # Renders flash as a solid. The screen turns white for 10 frames when a zombie is killed.~
** Processing line: ~    def render_flash~
** Processing line: ~      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.~
** 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: ~*** Advanced Rendering - Lighting - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Advanced Rendering - Lighting - 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 - Lighting - 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/12_lighting/app/main.rb~
** Processing line: ~  def calc args~
** Processing line: ~    args.state.swinging_light_sign     ||= 1~
** Processing line: ~    args.state.swinging_light_start_at ||= 0~
** Processing line: ~    args.state.swinging_light_duration ||= 300~
** Processing line: ~    args.state.swinging_light_perc       = args.state~
** Processing line: ~                                               .swinging_light_start_at~
** Processing line: ~                                               .ease_spline_extended args.state.tick_count,~
** Processing line: ~                                                                     args.state.swinging_light_duration,~
** Processing line: ~                                                                     [~
** Processing line: ~                                                                       [0.0, 1.0, 1.0, 1.0],~
** Processing line: ~                                                                       [1.0, 1.0, 1.0, 0.0]~
** Processing line: ~                                                                     ]~
** Processing line: ~    args.state.max_swing_angle ||= 45~
** Processing line: ~~
** Processing line: ~    if args.state.swinging_light_start_at.elapsed_time > args.state.swinging_light_duration~
** Processing line: ~      args.state.swinging_light_start_at = args.state.tick_count~
** Processing line: ~      args.state.swinging_light_sign *= -1~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    args.state.swinging_light_angle = 360 + ((args.state.max_swing_angle * args.state.swinging_light_perc) * args.state.swinging_light_sign)~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def render args~
** Processing line: ~    args.outputs.background_color = [0, 0, 0]~
** Processing line: ~~
** Processing line: ~    # render scene~
** Processing line: ~    args.outputs[:scene].sprites << { x:        0, y:   0, w: 1280, h: 720, path: :pixel }~
** Processing line: ~    args.outputs[:scene].sprites << { x: 640 - 40, y: 100, w:   80, h:  80, path: 'sprites/square/blue.png' }~
** Processing line: ~    args.outputs[:scene].sprites << { x: 640 - 40, y: 200, w:   80, h:  80, path: 'sprites/square/blue.png' }~
** Processing line: ~    args.outputs[:scene].sprites << { x: 640 - 40, y: 300, w:   80, h:  80, path: 'sprites/square/blue.png' }~
** Processing line: ~    args.outputs[:scene].sprites << { x: 640 - 40, y: 400, w:   80, h:  80, path: 'sprites/square/blue.png' }~
** Processing line: ~    args.outputs[:scene].sprites << { x: 640 - 40, y: 500, w:   80, h:  80, path: 'sprites/square/blue.png' }~
** Processing line: ~~
** Processing line: ~    # render light~
** Processing line: ~    swinging_light_w = 1100~
** Processing line: ~    args.outputs[:lights].background_color = [0, 0, 0, 0]~
** Processing line: ~    args.outputs[:lights].sprites << { x: 640 - swinging_light_w.half,~
** Processing line: ~                                       y: -1300,~
** Processing line: ~                                       w: swinging_light_w,~
** Processing line: ~                                       h: 3000,~
** Processing line: ~                                       angle_anchor_x: 0.5,~
** Processing line: ~                                       angle_anchor_y: 1.0,~
** Processing line: ~                                       path: "sprites/lights/mask.png",~
** Processing line: ~                                       angle: args.state.swinging_light_angle }~
** Processing line: ~~
** Processing line: ~    args.outputs[:lights].sprites << { x: args.inputs.mouse.x - 400,~
** Processing line: ~                                       y: args.inputs.mouse.y - 400,~
** Processing line: ~                                       w: 800,~
** Processing line: ~                                       h: 800,~
** Processing line: ~                                       path: "sprites/lights/mask.png" }~
** Processing line: ~~
** Processing line: ~    # merge unlighted scene with lights~
** Processing line: ~    args.outputs[:lighted_scene].sprites << { x: 0, y: 0, w: 1280, h: 720, path: :lights, blendmode_enum: 0 }~
** Processing line: ~    args.outputs[:lighted_scene].sprites << { blendmode_enum: 2, x: 0, y: 0, w: 1280, h: 720, path: :scene }~
** Processing line: ~~
** Processing line: ~    # output lighted scene to main canvas~
** Processing line: ~    args.outputs.sprites << { x: 0, y: 0, w: 1280, h: 720, path: :lighted_scene }~
** Processing line: ~~
** Processing line: ~    # render lights and scene render_targets as a mini map~
** Processing line: ~    args.outputs.debug  << { x: 16,      y: (16 + 90).from_top, w: 160, h: 90, r: 255, g: 255, b: 255 }.solid!~
** Processing line: ~    args.outputs.debug  << { x: 16,      y: (16 + 90).from_top, w: 160, h: 90, path: :lights }~
** Processing line: ~    args.outputs.debug  << { x: 16 + 80, y: (16 + 90 + 8).from_top, text: ":lights render_target", r: 255, g: 255, b: 255, size_enum: -3, alignment_enum: 1 }~
** Processing line: ~~
** Processing line: ~    args.outputs.debug  << { x: 16 + 160 + 16,      y: (16 + 90).from_top, w: 160, h: 90, r: 255, g: 255, b: 255 }.solid!~
** Processing line: ~    args.outputs.debug  << { x: 16 + 160 + 16,      y: (16 + 90).from_top, w: 160, h: 90, path: :scene }~
** Processing line: ~    args.outputs.debug  << { x: 16 + 160 + 16 + 80, y: (16 + 90 + 8).from_top, text: ":scene render_target", r: 255, g: 255, b: 255, size_enum: -3, alignment_enum: 1 }~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    render args~
** Processing line: ~    calc args~
** 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 - Triangles - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Advanced Rendering - Triangles - 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 - Triangles - 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/13_triangles/app/main.rb~
** Processing line: ~  def tick args~
** Processing line: ~    args.outputs.labels << {~
** Processing line: ~      x: 640,~
** Processing line: ~      y: 30.from_top,~
** Processing line: ~      text: "Triangle rendering is available in Indie and Pro versions (ignored in Standard Edition).",~
** Processing line: ~      alignment_enum: 1~
** Processing line: ~    }~
** Processing line: ~~
** Processing line: ~    dragonruby_logo_width  = 128~
** Processing line: ~    dragonruby_logo_height = 101~
** Processing line: ~~
** Processing line: ~    row_1 = 400~
** Processing line: ~    row_2 = 250~
** Processing line: ~~
** Processing line: ~    args.outputs.solids << make_triangle(~
** Processing line: ~      640 - dragonruby_logo_width.half - dragonruby_logo_width,~
** Processing line: ~      row_1,~
** Processing line: ~      640 - dragonruby_logo_width,~
** Processing line: ~      row_1 + 101,~
** Processing line: ~      640 + dragonruby_logo_width.half - dragonruby_logo_width,~
** Processing line: ~      row_1,~
** Processing line: ~      0, 128, 128,~
** Processing line: ~      128~
** Processing line: ~    )~
** Processing line: ~~
** Processing line: ~    args.outputs.solids << {~
** Processing line: ~      x:  640 - dragonruby_logo_width.half,~
** Processing line: ~      y:  row_1,~
** Processing line: ~      x2: 640,~
** Processing line: ~      y2: row_1 + dragonruby_logo_height,~
** Processing line: ~      x3: 640 + dragonruby_logo_width.half,~
** Processing line: ~      y3: row_1,~
** Processing line: ~    }~
** Processing line: ~~
** Processing line: ~    args.outputs.sprites << {~
** Processing line: ~      x:  640 - dragonruby_logo_width.half + dragonruby_logo_width,~
** Processing line: ~      y:  row_1,~
** Processing line: ~      x2: 640 + dragonruby_logo_width,~
** Processing line: ~      y2: row_1 + 101,~
** Processing line: ~      x3: 640 + dragonruby_logo_width.half + dragonruby_logo_width,~
** Processing line: ~      y3: row_1,~
** Processing line: ~      path: 'dragonruby.png',~
** Processing line: ~      source_x:  0,~
** Processing line: ~      source_y:  0,~
** Processing line: ~      source_x2: dragonruby_logo_width.half,~
** Processing line: ~      source_y2: dragonruby_logo_height,~
** Processing line: ~      source_x3: dragonruby_logo_width,~
** Processing line: ~      source_y3: 0~
** Processing line: ~    }~
** Processing line: ~~
** Processing line: ~    args.outputs.primitives << make_triangle(~
** Processing line: ~      640 - dragonruby_logo_width.half - dragonruby_logo_width,~
** Processing line: ~      row_2,~
** Processing line: ~      640 - dragonruby_logo_width,~
** Processing line: ~      row_2 + 101,~
** Processing line: ~      640 + dragonruby_logo_width.half - dragonruby_logo_width,~
** Processing line: ~      row_2,~
** Processing line: ~      0, 128, 128,~
** Processing line: ~      args.state.tick_count.to_radians.sin_r.abs * 255~
** Processing line: ~    )~
** Processing line: ~~
** Processing line: ~    args.outputs.primitives << {~
** Processing line: ~      x:  640 - dragonruby_logo_width.half,~
** Processing line: ~      y:  row_2,~
** Processing line: ~      x2: 640,~
** Processing line: ~      y2: row_2 + dragonruby_logo_height,~
** Processing line: ~      x3: 640 + dragonruby_logo_width.half,~
** Processing line: ~      y3: row_2,~
** Processing line: ~      r:  255~
** Processing line: ~    }~
** Processing line: ~~
** Processing line: ~    args.outputs.primitives << {~
** Processing line: ~      x:  640 - dragonruby_logo_width.half + dragonruby_logo_width,~
** Processing line: ~      y:  row_2,~
** Processing line: ~      x2: 640 + dragonruby_logo_width,~
** Processing line: ~      y2: row_2 + 101,~
** Processing line: ~      x3: 640 + dragonruby_logo_width.half + dragonruby_logo_width,~
** Processing line: ~      y3: row_2,~
** Processing line: ~      path: 'dragonruby.png',~
** Processing line: ~      source_x:  0,~
** Processing line: ~      source_y:  0,~
** Processing line: ~      source_x2: dragonruby_logo_width.half,~
** Processing line: ~      source_y2: dragonruby_logo_height.half +~
** Processing line: ~                 dragonruby_logo_height.half * Math.sin(args.state.tick_count.to_radians).abs,~
** Processing line: ~      source_x3: dragonruby_logo_width,~
** Processing line: ~      source_y3: 0~
** Processing line: ~    }~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def make_triangle *opts~
** Processing line: ~    x, y, x2, y2, x3, y3, r, g, b, a = opts~
** Processing line: ~    {~
** Processing line: ~      x: x, y: y, x2: x2, y2: y2, x3: x3, y3: y3,~
** Processing line: ~      r: r || 0,~
** Processing line: ~      g: g || 0,~
** Processing line: ~      b: b || 0,~
** Processing line: ~      a: a || 255~
** Processing line: ~    }~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** Advanced Rendering - 14 Triangles Trapezoid - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Advanced Rendering - 14 Triangles Trapezoid - 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 - 14 Triangles Trapezoid - 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/14_triangles_trapezoid/app/main.rb~
** Processing line: ~  def tick args~
** Processing line: ~    args.outputs.labels << {~
** Processing line: ~      x: 640,~
** Processing line: ~      y: 30.from_top,~
** Processing line: ~      text: "Triangle rendering is available in Indie and Pro versions (ignored in Standard Edition).",~
** Processing line: ~      alignment_enum: 1~
** Processing line: ~    }~
** Processing line: ~~
** Processing line: ~    transform_scale = ((args.state.tick_count / 3).sin.abs ** 5).half~
** Processing line: ~    args.outputs.sprites << [~
** Processing line: ~      { x:         600,~
** Processing line: ~        y:         320,~
** Processing line: ~        x2:        600,~
** Processing line: ~        y2:        400,~
** Processing line: ~        x3:        640,~
** Processing line: ~        y3:        360,~
** Processing line: ~        path:      "sprites/square/blue.png",~
** Processing line: ~        source_x:  0,~
** Processing line: ~        source_y:  0,~
** Processing line: ~        source_x2: 0,~
** Processing line: ~        source_y2: 80,~
** Processing line: ~        source_x3: 40,~
** Processing line: ~        source_y3: 40 },~
** Processing line: ~      { x:         600,~
** Processing line: ~        y:         400,~
** Processing line: ~        x2:        680,~
** Processing line: ~        y2:        (400 - 80 * transform_scale).round,~
** Processing line: ~        x3:        640,~
** Processing line: ~        y3:        360,~
** Processing line: ~        path:      "sprites/square/blue.png",~
** Processing line: ~        source_x:  0,~
** Processing line: ~        source_y:  80,~
** Processing line: ~        source_x2: 80,~
** Processing line: ~        source_y2: 80,~
** Processing line: ~        source_x3: 40,~
** Processing line: ~        source_y3: 40 },~
** Processing line: ~      { x:         640,~
** Processing line: ~        y:         360,~
** Processing line: ~        x2:        680,~
** Processing line: ~        y2:        (400 - 80 * transform_scale).round,~
** Processing line: ~        x3:        680,~
** Processing line: ~        y3:        (320 + 80 * transform_scale).round,~
** Processing line: ~        path:      "sprites/square/blue.png",~
** Processing line: ~        source_x:  40,~
** Processing line: ~        source_y:  40,~
** Processing line: ~        source_x2: 80,~
** Processing line: ~        source_y2: 80,~
** Processing line: ~        source_x3: 80,~
** Processing line: ~        source_y3: 0 },~
** Processing line: ~      { x:         600,~
** Processing line: ~        y:         320,~
** Processing line: ~        x2:        640,~
** Processing line: ~        y2:        360,~
** Processing line: ~        x3:        680,~
** Processing line: ~        y3:        (320 + 80 * transform_scale).round,~
** Processing line: ~        path:      "sprites/square/blue.png",~
** Processing line: ~        source_x:  0,~
** Processing line: ~        source_y:  0,~
** Processing line: ~        source_x2: 40,~
** Processing line: ~        source_y2: 40,~
** Processing line: ~        source_x3: 80,~
** Processing line: ~        source_y3: 0 }~
** Processing line: ~    ]~
** Processing line: ~  end~
** 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: ~*** Performance - Collision Limits Many To Many - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Performance - Collision Limits Many To Many - 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 Many To Many - 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/09_collision_limits_many_to_many/app/main.rb~
** Processing line: ~  class Square~
** Processing line: ~    attr :x, :y, :w, :h~
** Processing line: ~~
** Processing line: ~    def initialize grid~
** Processing line: ~      @grid = grid~
** Processing line: ~      @x = (rand @grid.w)~
** Processing line: ~      @y = (rand @grid.h)~
** Processing line: ~      @w    = 20~
** Processing line: ~      @h    = 20~
** Processing line: ~      @s    = 1 + (4.randomize :ratio)~
** Processing line: ~      @path = 'sprites/square/blue.png'~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def mark_collisions all~
** Processing line: ~      # be sure to do an optimized compilation -O3~
** Processing line: ~~
** Processing line: ~      # using FFI function~
** Processing line: ~~
** Processing line: ~      if all[self]~
** Processing line: ~        @path = 'sprites/square/red.png'~
** Processing line: ~      else~
** Processing line: ~        @path = 'sprites/square/blue.png'~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def draw_override ffi_draw~
** Processing line: ~      ffi_draw.draw_sprite @x, @y, @w, @h, @path~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  class Game~
** Processing line: ~    attr_gtk~
** Processing line: ~~
** Processing line: ~    def tick~
** Processing line: ~      if Kernel.global_tick_count == 0~
** Processing line: ~        puts ""~
** Processing line: ~        puts ""~
** Processing line: ~        puts "========================================================="~
** Processing line: ~        puts "* INFO: Many to Many Collisions"~
** Processing line: ~        puts "* INFO: Please specify the number of sprites to check collisions on."~
** Processing line: ~        args.gtk.console.set_command "reset_with count: 100"~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      if args.state.tick_count == 0~
** Processing line: ~        args.state.stars = args.state.star_count.map { |i| Square.new args.grid }~
** Processing line: ~        args.outputs.static_sprites << args.state.stars~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      state.all_collisions = GTK::Geometry.find_collisions args.state.stars~
** Processing line: ~      Fn.each_send args.state.stars, self, :mark_collision~
** Processing line: ~~
** 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: ~    def mark_collision star~
** Processing line: ~      star.mark_collisions state.all_collisions~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def reset_with count: count~
** Processing line: ~      $gtk.reset~
** Processing line: ~      $gtk.args.state.star_count = count~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    $game ||= Game.new~
** Processing line: ~    $game.args = args and $game.tick~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def reset_with count: count~
** Processing line: ~    $game.reset_with count: count~
** Processing line: ~  end~
** 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: ~  <Person id="100">~
** Processing line: ~    <Name>John Doe</Name>~
** Processing line: ~  </Person>~
** 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, "<html><head><title>hello</title></head><body><h1>This #{req.method} was request number #{args.state.reqnum}!</h1></body></html>\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: ~*** C Extensions - Handcrafted Extension - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~C Extensions - Handcrafted Extension - 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 - Handcrafted Extension - 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/04_handcrafted_extension/app/main.rb~
** Processing line: ~  $gtk.ffi_misc.gtk_dlopen("ext")~
** Processing line: ~  include FFI::CExt~
** Processing line: ~~
** Processing line: ~  puts Adder.new.add_all(1, 2, 3, [4, 5, 6.0])~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** C Extensions - Handcrafted Extension - license.txt~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~C Extensions - Handcrafted Extension - 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: ~C Extensions - Handcrafted Extension - 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/12_c_extensions/04_handcrafted_extension/license.txt~
** Processing line: ~  Copyright 2022 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: ~*** 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: ~*** 14 Vr - Skybox - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Skybox - 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: ~14 Vr - Skybox - 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/14_vr/01_skybox/app/main.rb~
** Processing line: ~  require 'app/tick.rb'~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    args.gtk.start_server! port: 9001, enable_in_prod: true~
** Processing line: ~    tick_game args~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** 14 Vr - Skybox - tick.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Skybox - tick.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: ~14 Vr - Skybox - tick.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/14_vr/01_skybox/app/tick.rb~
** Processing line: ~  def skybox args, x, y, z, size~
** Processing line: ~    sprite = { a: 128, path: 'sprites/box.png' }~
** Processing line: ~~
** Processing line: ~    front      = { x: x, y: y, z: z, w: size, h: size, **sprite }~
** Processing line: ~    front_720  = { x: x, y: y, z: z, w: size, h: size * 9.fdiv(16), **sprite }~
** Processing line: ~    back       = { x: x, y: y, z: z + size, w: size, h: size, **sprite }~
** Processing line: ~    bottom     = { x: x, y: y - size.half, z: z + size.half, w: size, h: size, angle_x: 90, **sprite }~
** Processing line: ~    top        = { x: x, y: y + size.half, z: z + size.half, w: size, h: size, angle_x: 90, **sprite }~
** Processing line: ~    left       = { x: x - size.half, y: y, w: size, h: size, z: z + size.half, angle_y: 90, **sprite }~
** Processing line: ~    right      = { x: x + size.half, y: y, w: size, h: size, z: z + size.half, angle_y: 90, **sprite }~
** Processing line: ~~
** Processing line: ~    args.outputs.sprites << [back,~
** Processing line: ~                             left,~
** Processing line: ~                             top,~
** Processing line: ~                             bottom,~
** Processing line: ~                             right,~
** Processing line: ~                             front,~
** Processing line: ~                             front_720]~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def tick_game args~
** Processing line: ~    args.outputs.background_color = [0, 0, 0]~
** Processing line: ~~
** Processing line: ~    args.state.z     ||= 0~
** Processing line: ~    args.state.scale ||= 0.05~
** Processing line: ~~
** Processing line: ~    if args.inputs.controller_one.key_down.a~
** Processing line: ~      if args.grid.name == :bottom_left~
** Processing line: ~        args.grid.origin_center!~
** Processing line: ~      else~
** Processing line: ~        args.grid.origin_bottom_left!~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    args.state.scale += args.inputs.controller_one.right_analog_x_perc * 0.01~
** Processing line: ~    args.state.z += args.inputs.controller_one.right_analog_y_perc * 1.5~
** Processing line: ~~
** Processing line: ~    args.state.scale = args.state.scale.clamp(0.05, 1.0)~
** Processing line: ~    args.state.z = 0    if args.state.z < 0~
** Processing line: ~    args.state.z = 1280 if args.state.z > 1280~
** Processing line: ~~
** Processing line: ~    skybox args, 0, 0, args.state.z, 1280 * args.state.scale~
** Processing line: ~~
** Processing line: ~    render_guides args~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def render_guides args~
** Processing line: ~    label_style = { alignment_enum: 1,~
** Processing line: ~                    size_enum: -2,~
** Processing line: ~                    vertical_alignment_enum: 0, r: 255, g: 255, b: 255 }~
** Processing line: ~~
** Processing line: ~    instructions = [~
** Processing line: ~      "scale: #{args.state.scale.to_sf} (right analog left/right)",~
** Processing line: ~      "z: #{args.state.z.to_sf} (right analog up/down)",~
** Processing line: ~      "origin: :#{args.grid.name} (A button)"~
** Processing line: ~    ]~
** Processing line: ~~
** Processing line: ~    args.outputs.labels << instructions.map_with_index do |text, i|~
** Processing line: ~      { x: 640,~
** Processing line: ~        y: 100 + ((instructions.length - (i + 1)) * 22),~
** Processing line: ~        z: args.state.z,~
** Processing line: ~        a: 255,~
** Processing line: ~        text: text,~
** Processing line: ~        ** label_style,~
** Processing line: ~        alignment_enum: 1,~
** Processing line: ~        vertical_alignment_enum: 0 }~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # lines for scaled box~
** Processing line: ~    size      = 1280 * args.state.scale~
** Processing line: ~    size_16_9 = size * 9.fdiv(16)~
** Processing line: ~~
** Processing line: ~    args.outputs.primitives << [~
** Processing line: ~      { x: size - 1280, y: size,        z:            0, w: 1280 * 2, r: 128, g: 128, b: 128, a:  64 }.line!,~
** Processing line: ~      { x: size - 1280, y: size,        z: args.state.z, w: 1280 * 2, r: 128, g: 128, b: 128, a: 255 }.line!,~
** Processing line: ~~
** Processing line: ~      { x: size - 1280, y: size_16_9,   z:            0, w: 1280 * 2, r: 128, g: 128, b: 128, a:  64 }.line!,~
** Processing line: ~      { x: size - 1280, y: size_16_9,   z: args.state.z, w: 1280 * 2, r: 128, g: 128, b: 128, a: 255 }.line!,~
** Processing line: ~~
** Processing line: ~      { x: size,        y: size - 1280, z:            0, h: 1280 * 2, r: 128, g: 128, b: 128, a:  64 }.line!,~
** Processing line: ~      { x: size,        y: size - 1280, z: args.state.z, h: 1280 * 2, r: 128, g: 128, b: 128, a: 255 }.line!,~
** Processing line: ~~
** Processing line: ~      { x: size,        y: size,        z: args.state.z, size_enum: -2,~
** Processing line: ~        vertical_alignment_enum: 0,~
** Processing line: ~        text: "#{size.to_sf}, #{size.to_sf}, #{args.state.z.to_sf}",~
** Processing line: ~        r: 255, g: 255, b: 255, a: 255 }.label!,~
** Processing line: ~~
** Processing line: ~      { x: size,        y: size_16_9,   z: args.state.z, size_enum: -2,~
** Processing line: ~        vertical_alignment_enum: 0,~
** Processing line: ~        text: "#{size.to_sf}, #{size_16_9.to_sf}, #{args.state.z.to_sf}",~
** Processing line: ~        r: 255, g: 255, b: 255, a: 255 }.label!,~
** Processing line: ~    ]~
** Processing line: ~~
** Processing line: ~    xs = [~
** Processing line: ~      { description: "left",   x:    0, alignment_enum: 0 },~
** Processing line: ~      { description: "center", x:  640, alignment_enum: 1 },~
** Processing line: ~      { description: "right",  x: 1280, alignment_enum: 2 },~
** Processing line: ~    ]~
** Processing line: ~~
** Processing line: ~    ys = [~
** Processing line: ~      { description: "bottom",        y:    0, vertical_alignment_enum: 0 },~
** Processing line: ~      { description: "center",        y:  640, vertical_alignment_enum: 1 },~
** Processing line: ~      { description: "center (720p)", y:  360, vertical_alignment_enum: 1 },~
** Processing line: ~      { description: "top",           y: 1280, vertical_alignment_enum: 2 },~
** Processing line: ~      { description: "top (720p)",    y:  720, vertical_alignment_enum: 2 },~
** Processing line: ~    ]~
** Processing line: ~~
** Processing line: ~    args.outputs.primitives << xs.product(ys).map do |(xdef, ydef)|~
** Processing line: ~      [~
** Processing line: ~        { x: xdef.x,~
** Processing line: ~          y: ydef.y,~
** Processing line: ~          z: args.state.z,~
** Processing line: ~          text: "#{xdef.x.to_sf}, #{ydef.y.to_sf} #{args.state.z}",~
** Processing line: ~          **label_style,~
** Processing line: ~          alignment_enum: xdef.alignment_enum,~
** Processing line: ~          vertical_alignment_enum: ydef.vertical_alignment_enum~
** Processing line: ~        },~
** Processing line: ~        { x: xdef.x,~
** Processing line: ~          y: ydef.y - 20,~
** Processing line: ~          z: args.state.z,~
** Processing line: ~          text: "#{ydef.description}, #{xdef.description}",~
** Processing line: ~          **label_style,~
** Processing line: ~          alignment_enum: xdef.alignment_enum,~
** Processing line: ~          vertical_alignment_enum: ydef.vertical_alignment_enum~
** Processing line: ~        }~
** Processing line: ~      ]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    args.outputs.primitives << xs.product(ys).map do |(xdef, ydef)|~
** Processing line: ~      [~
** Processing line: ~        {~
** Processing line: ~          x: xdef.x - 1280,~
** Processing line: ~          y: ydef.y,~
** Processing line: ~          w: 1280 * 2,~
** Processing line: ~          a: 64,~
** Processing line: ~          r: 128, g: 128, b: 128~
** Processing line: ~        }.line!,~
** Processing line: ~        {~
** Processing line: ~          x: xdef.x,~
** Processing line: ~          y: ydef.y - 720,~
** Processing line: ~          h: 720 * 2,~
** Processing line: ~          a: 64,~
** Processing line: ~          r: 128, g: 128, b: 128~
** Processing line: ~        }.line!,~
** Processing line: ~      ].map do |p|~
** Processing line: ~        [~
** Processing line: ~          p.merge(z:            0, a:  64),~
** Processing line: ~          p.merge(z: args.state.z, a: 255)~
** 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: ~*** 14 Vr - Top Down Rpg - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Top Down Rpg - 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: ~14 Vr - Top Down Rpg - 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/14_vr/02_top_down_rpg/app/main.rb~
** Processing line: ~  require 'app/tick.rb'~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    args.gtk.start_server! port: 9001, enable_in_prod: true~
** Processing line: ~    tick_game args~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** 14 Vr - Top Down Rpg - tick.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Top Down Rpg - tick.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: ~14 Vr - Top Down Rpg - tick.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/14_vr/02_top_down_rpg/app/tick.rb~
** Processing line: ~  class Game~
** Processing line: ~    attr_gtk~
** Processing line: ~~
** Processing line: ~    def tick~
** Processing line: ~      outputs.background_color = [0, 0, 0]~
** 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.goal~
** Processing line: ~      args.outputs.solids << args.state.walls~
** Processing line: ~      args.outputs.solids << args.state.player~
** Processing line: ~~
** Processing line: ~      args.outputs.solids << args.state.walls.map { |s| s.to_hash.merge(z: 2, g: 80) }~
** Processing line: ~      args.outputs.solids << args.state.walls.map { |s| s.to_hash.merge(z: 6, g: 255, a: 128) }~
** 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 << { x: 640,~
** Processing line: ~                                 y: 360,~
** Processing line: ~                                 z: 10,~
** Processing line: ~                                 text: "YOU'RE A GOD DAMN WIZARD, HARRY.",~
** Processing line: ~                                 size_enum: 10,~
** Processing line: ~                                 alignment_enum: 1,~
** Processing line: ~                                 vertical_alignment_enum: 1,~
** Processing line: ~                                 r: 255,~
** Processing line: ~                                 g: 255,~
** Processing line: ~                                 b: 255 }~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      move_player args, -1,  0 if args.inputs.keyboard.left  || args.inputs.controller_one.left # x position decreases by 1 if left key is pressed~
** Processing line: ~      move_player args,  1,  0 if args.inputs.keyboard.right || args.inputs.controller_one.right # x position increases by 1 if right key is pressed~
** Processing line: ~      move_player args,  0,  1 if args.inputs.keyboard.up    || args.inputs.controller_one.down # y position increases by 1 if up is pressed~
** Processing line: ~      move_player args,  0, -1 if args.inputs.keyboard.down  || args.inputs.controller_one.up # 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, 180,  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: ~  end~
** Processing line: ~~
** Processing line: ~  $game = Game.new~
** Processing line: ~~
** Processing line: ~  def tick_game 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: ~*** 14 Vr - Space Invaders - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Space Invaders - 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: ~14 Vr - Space Invaders - 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/14_vr/03_space_invaders/app/main.rb~
** Processing line: ~  require 'app/tick.rb'~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    args.gtk.start_server! port: 9001, enable_in_prod: true~
** Processing line: ~    tick_game args~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** 14 Vr - Space Invaders - tick.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Space Invaders - tick.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: ~14 Vr - Space Invaders - tick.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/14_vr/03_space_invaders/app/tick.rb~
** Processing line: ~  class Game~
** Processing line: ~    attr_gtk~
** Processing line: ~~
** Processing line: ~    def tick~
** Processing line: ~      grid.origin_center!~
** Processing line: ~      defaults~
** Processing line: ~      outputs.background_color = [0, 0, 0]~
** Processing line: ~      args.outputs.sprites << state.enemies.map { |e| enemy_prefab e }~
** Processing line: ~~
** Processing line: ~      if gtk.platform? :macos~
** Processing line: ~        args.outputs.borders << hmap(x: -150,~
** Processing line: ~                                     y: -220,~
** Processing line: ~                                     w: 300, h: 130, r: 255, g: 255, b: 255)~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def defaults~
** Processing line: ~      state.enemy_sprite_size = 64~
** Processing line: ~      state.row_size = 16~
** Processing line: ~      state.max_rows = 20~
** Processing line: ~      state.enemies ||= 160.map_with_index do |i|~
** Processing line: ~        x = i % 16~
** Processing line: ~        y = i.idiv 16~
** Processing line: ~        hmap row: y, col: x~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def enemy_prefab enemy~
** Processing line: ~      if enemy.row > state.max_rows~
** Processing line: ~        raise "#{enemy}"~
** Processing line: ~      end~
** Processing line: ~      relative_row = enemy.row + 1~
** Processing line: ~      z = 50 - relative_row * 10~
** Processing line: ~      x = (enemy.col * state.enemy_sprite_size) - (state.enemy_sprite_size * state.row_size).idiv(2)~
** Processing line: ~      enemy_sprite(x, enemy.row * 10, z, enemy)~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def enemy_sprite x, y, z, meta~
** Processing line: ~      index = 0.frame_index count: 2, hold_for: 50, repeat: true~
** Processing line: ~      pmap(x: x, y: y, z: z, w: state.enemy_sprite_size, h: state.enemy_sprite_size, path: 'sprites/enemy.png', source_x: 128 * index, source_y: 0, source_w: 128, source_h: 128, meta: meta)~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def pmap opts~
** Processing line: ~      if gtk.platform? :macos~
** Processing line: ~        if opts.z >= 60~
** Processing line: ~          return nil~
** Processing line: ~        elsif (opts.z * 8) > 1000~
** Processing line: ~          return nil~
** Processing line: ~        elsif opts.z <= 60~
** Processing line: ~          scale = (1000 - opts.z * 8).fdiv(1000)~
** Processing line: ~          hscale = 0.5 * scale ** 6~
** Processing line: ~          vscale = scale~
** Processing line: ~          w = (state.enemy_sprite_size * 0.5) * hscale~
** Processing line: ~          h = (state.enemy_sprite_size * 0.5) * hscale~
** Processing line: ~~
** Processing line: ~          transform_x = opts.x * 0.5~
** Processing line: ~          x = transform_x * hscale~
** Processing line: ~~
** Processing line: ~          y_magnitude = 0.45~
** Processing line: ~          transform_y = opts.y * y_magnitude~
** Processing line: ~          y = (-transform_y * vscale ** 5.5) + 50 * y_magnitude~
** Processing line: ~~
** Processing line: ~          return opts.merge! x: x, y: y, w: w, h: h~
** Processing line: ~        else~
** Processing line: ~          raise "#{opts}"~
** Processing line: ~          return nil~
** Processing line: ~        end~
** Processing line: ~      else~
** Processing line: ~        return opts.merge! y: opts.y - 55~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  $game = Game.new~
** Processing line: ~~
** Processing line: ~  def tick_game 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: ~*** 14 Vr - Let There Be Light - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Let There Be Light - 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: ~14 Vr - Let There Be Light - 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/14_vr/04_let_there_be_light/app/main.rb~
** Processing line: ~  require 'app/tick.rb'~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    args.gtk.start_server! port: 9001, enable_in_prod: true~
** Processing line: ~    tick_game args~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** 14 Vr - Let There Be Light - tick.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Let There Be Light - tick.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: ~14 Vr - Let There Be Light - tick.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/14_vr/04_let_there_be_light/app/tick.rb~
** Processing line: ~  class Game~
** Processing line: ~    attr_gtk~
** Processing line: ~~
** Processing line: ~    def tick~
** Processing line: ~      grid.origin_center!~
** Processing line: ~      defaults~
** Processing line: ~      state.angle_shift_x ||= 180~
** Processing line: ~      state.angle_shift_y ||= 180~
** Processing line: ~~
** Processing line: ~      if inputs.controller_one.right_analog_y_perc.round(2) != 0.00~
** Processing line: ~        args.state.star_distance += (inputs.controller_one.right_analog_y_perc * 0.25) ** 2 * inputs.controller_one.right_analog_y_perc.sign~
** Processing line: ~        state.star_distance = state.star_distance.clamp(state.min_star_distance, state.max_star_distance)~
** Processing line: ~        state.star_sprites = calc_star_primitives~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      render~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_star_primitives~
** Processing line: ~      args.state.stars.map do |s|~
** Processing line: ~        w = (32 * state.star_distance).clamp(1, 32)~
** Processing line: ~        h = (32 * state.star_distance).clamp(1, 32)~
** Processing line: ~        x = (state.max.x * state.star_distance) * s.xr~
** Processing line: ~        y = (state.max.y * state.star_distance) * s.yr~
** Processing line: ~        z = state.center.z + (state.max.z * state.star_distance * 10 * s.zr)~
** Processing line: ~~
** Processing line: ~        angle_x = Math.atan2(z - 600, y).to_degrees + 90~
** Processing line: ~        angle_y = Math.atan2(z - 600, x).to_degrees + 90~
** Processing line: ~~
** Processing line: ~        draw_x = x - w.half~
** Processing line: ~        draw_y = y - 40 - h.half~
** Processing line: ~        draw_z = z~
** Processing line: ~~
** Processing line: ~        { x: draw_x,~
** Processing line: ~          y: draw_y,~
** Processing line: ~          z: draw_z,~
** Processing line: ~          b: 255,~
** Processing line: ~          w: w,~
** Processing line: ~          h: h,~
** Processing line: ~          angle_x: angle_x,~
** Processing line: ~          angle_y: angle_y,~
** Processing line: ~          path: 'sprites/star.png' }~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render~
** Processing line: ~      outputs.background_color = [0, 0, 0]~
** Processing line: ~      if gtk.platform? :macos~
** Processing line: ~        args.outputs.borders << hmap(x: -150,~
** Processing line: ~                                     y: -220,~
** Processing line: ~                                     w: 300, h: 130, r: 255, g: 255, b: 255)~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      if state.star_distance <= 1.0~
** Processing line: ~        text_alpha = (1 - state.star_distance) * 255~
** Processing line: ~        args.outputs.labels << { x: 0, y: 50, text: "Let there be light.", r: 255, g: 255, b: 255, size_enum: 1, alignment_enum: 1, a: text_alpha }~
** Processing line: ~        args.outputs.labels << { x: 0, y: 25, text: "(right analog: up/down)", r: 255, g: 255, b: 255, size_enum: -2, alignment_enum: 1, a: text_alpha }~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      args.outputs.sprites << state.star_sprites~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def random_point~
** Processing line: ~      r = { xr: 2.randomize(:ratio) - 1,~
** Processing line: ~            yr: 2.randomize(:ratio) - 1,~
** Processing line: ~            zr: 2.randomize(:ratio) - 1 }~
** Processing line: ~      if (r.xr ** 2 + r.yr ** 2 + r.zr ** 2) > 1.0~
** Processing line: ~        return random_point~
** Processing line: ~      else~
** Processing line: ~        return r~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def defaults~
** Processing line: ~      state.max_star_distance ||= 100~
** Processing line: ~      state.min_star_distance ||= 0.001~
** Processing line: ~      state.star_distance     ||= 0.001~
** Processing line: ~      state.star_angle        ||= 0~
** Processing line: ~~
** Processing line: ~      state.center.x       ||= 0~
** Processing line: ~      state.center.y       ||= 0~
** Processing line: ~      state.center.z       ||= 30~
** Processing line: ~      state.max.x          ||= 640~
** Processing line: ~      state.max.y          ||= 640~
** Processing line: ~      state.max.z          ||= 50~
** Processing line: ~~
** Processing line: ~      state.stars ||= 500.map do~
** Processing line: ~        random_point~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      state.star_sprites ||= calc_star_primitives~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  $game = Game.new~
** Processing line: ~~
** Processing line: ~  def tick_game 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: ~*** 14 Vr - Draw A Cube - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Draw A 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: ~14 Vr - Draw A 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/14_vr/05_draw_a_cube/app/main.rb~
** Processing line: ~  require 'app/tick.rb'~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    args.gtk.start_server! port: 9001, enable_in_prod: true~
** Processing line: ~    tick_game args~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** 14 Vr - Draw A Cube - tick.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Draw A Cube - tick.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: ~14 Vr - Draw A Cube - tick.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/14_vr/05_draw_a_cube/app/tick.rb~
** Processing line: ~  def cube args, x, y, z, size~
** Processing line: ~    sprite = { w: size, h: size, path: 'sprites/square/blue.png' }~
** Processing line: ~    back   = { x: x,                 y: y,                 z: z - size.half + 1,              **sprite }~
** Processing line: ~    front  = { x: x,                 y: y,                 z: z + size.half - 1,              **sprite }~
** Processing line: ~    top    = { x: x,                 y: y + size.half - 1, z: z,                 angle_x: 90, **sprite }~
** Processing line: ~    bottom = { x: x,                 y: y - size.half + 1, z: z,                 angle_x: 90, **sprite }~
** Processing line: ~    left   = { x: x - size.half + 1, y: y,                 z: z,                 angle_y: 90, **sprite }~
** Processing line: ~    right  = { x: x + size.half - 1, y: y,                 z: z,                 angle_y: 90, **sprite }~
** Processing line: ~~
** Processing line: ~    # assumes cube is always in front of player~
** Processing line: ~    # looking at cube straight on~
** Processing line: ~    #    0         0~
** Processing line: ~    if y == 0 && x == 0~
** Processing line: ~      args.outputs.sprites << [back, left, top, bottom, right, front]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # looking at right side of cube, head on~
** Processing line: ~    #    -         0~
** Processing line: ~    if x < 0 && y == 0~
** Processing line: ~      args.outputs.sprites << [back, left, top, bottom, right, front]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # looking at left side of the cube, head on~
** Processing line: ~    #    +         0~
** Processing line: ~    if x > 0 && y == 0~
** Processing line: ~      args.outputs.sprites << [back, right, top, bottom, left, front]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # looking at top of the cube, head on~
** Processing line: ~    #    0         -~
** Processing line: ~    if x == 0 && y < 0~
** Processing line: ~      args.outputs.sprites << [back, left, bottom, right, front, top]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # looking at bottom of the cube, head on~
** Processing line: ~    #    0         +~
** Processing line: ~    if x == 0 && y > 0~
** Processing line: ~      args.outputs.sprites << [back, left, top, right, front, bottom]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # looking at right, and top of cube~
** Processing line: ~    #    -        -~
** Processing line: ~    if x < 0 && y < 0~
** Processing line: ~      args.outputs.sprites << [back, left, bottom, right, top, front]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # looking at right, and bottom of cube~
** Processing line: ~    #    -        +~
** Processing line: ~    if x < 0 && y > 0~
** Processing line: ~      args.outputs.sprites << [back, left, bottom, top, right, front]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # looking at left, and top of cube~
** Processing line: ~    #    +        -~
** Processing line: ~    if x > 0 && y < 0~
** Processing line: ~      args.outputs.sprites << [back, right, bottom, left, top, front]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    # looking at left, and bottom of cube~
** Processing line: ~    #    +        +~
** Processing line: ~    if x > 0 && y > 0~
** Processing line: ~      args.outputs.sprites << [back, right, top, left, bottom, front]~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def tick_game args~
** Processing line: ~    args.grid.origin_center!~
** Processing line: ~    args.outputs.background_color = [0, 0, 0]~
** Processing line: ~~
** Processing line: ~    args.state.x ||= 0~
** Processing line: ~    args.state.y ||= 0~
** Processing line: ~~
** Processing line: ~    args.state.x += 10 * args.inputs.controller_one.right_analog_x_perc~
** Processing line: ~    args.state.y += 10 * args.inputs.controller_one.right_analog_y_perc * -1~
** Processing line: ~~
** Processing line: ~    cube args, args.state.x, args.state.y, 0, 100~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  $gtk.reset~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** 14 Vr - Citadels - tick.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Citadels - tick.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: ~14 Vr - Citadels - tick.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/14_vr/06_citadels/app/tick.rb~
** Processing line: ~  class Game~
** Processing line: ~    attr_gtk~
** Processing line: ~~
** Processing line: ~    def citadel x, y, z~
** Processing line: ~      angle = state.tick_count.idiv(10) % 360~
** Processing line: ~      adjacent = 40~
** Processing line: ~      adjacent = adjacent.ceil~
** Processing line: ~      angle = Math.atan2(40, 70).to_degrees~
** Processing line: ~      y += 500~
** Processing line: ~      x -= 40~
** Processing line: ~      back_sprites = [~
** Processing line: ~        { z: z - 40 + adjacent.half,~
** Processing line: ~          x: x,~
** Processing line: ~          y: y + 75,~
** Processing line: ~          w: 80, h: 80, angle_x: angle, path: "sprites/triangle/equilateral/blue.png" },~
** Processing line: ~        { z: z - 40,~
** Processing line: ~          x: x,~
** Processing line: ~          y: y - 400 + 80,~
** Processing line: ~          w: 80, h: 400, path: "sprites/square/blue.png" },~
** Processing line: ~      ]~
** Processing line: ~~
** Processing line: ~      left_sprites = [~
** Processing line: ~        { z: z,~
** Processing line: ~          x: x - 40 + adjacent.half,~
** Processing line: ~          y: y + 75,~
** Processing line: ~          w: 80, h: 80, angle_x: -angle, angle_y: 90, path: "sprites/triangle/equilateral/blue.png" },~
** Processing line: ~        { z: z,                      x: x - 40,~
** Processing line: ~          y: y - 400 + 80,~
** Processing line: ~          w: 80, h: 400, angle_y: 90, path: "sprites/square/blue.png" },~
** Processing line: ~      ]~
** Processing line: ~~
** Processing line: ~      right_sprites = [~
** Processing line: ~        { z: z,~
** Processing line: ~          x: x + 40 - adjacent.half,~
** Processing line: ~          y: y + 75,~
** Processing line: ~          w: 80, h: 80, angle_x: angle, angle_y: 90, path: "sprites/triangle/equilateral/blue.png" },~
** Processing line: ~        { z: z,~
** Processing line: ~          x: x + 40,~
** Processing line: ~          y: y - 400 + 80,~
** Processing line: ~          w: 80, h: 400, angle_y: 90, path: "sprites/square/blue.png" },~
** Processing line: ~      ]~
** Processing line: ~~
** Processing line: ~      front_sprites = [~
** Processing line: ~        { z: z + 40 - adjacent.half,~
** Processing line: ~          x: x,~
** Processing line: ~          y: y + 75,~
** Processing line: ~          w: 80, h: 80, angle_x: -angle, path: "sprites/triangle/equilateral/blue.png" },~
** Processing line: ~        { z: z + 40,~
** Processing line: ~          x: x,~
** Processing line: ~          y: y - 400 + 80,~
** Processing line: ~          w: 80, h: 400, path: "sprites/square/blue.png" },~
** Processing line: ~      ]~
** Processing line: ~~
** Processing line: ~      if x > 700~
** Processing line: ~        [~
** Processing line: ~          back_sprites,~
** Processing line: ~          right_sprites,~
** Processing line: ~          front_sprites,~
** Processing line: ~          left_sprites,~
** Processing line: ~        ]~
** Processing line: ~      elsif x < 600~
** Processing line: ~        [~
** Processing line: ~          back_sprites,~
** Processing line: ~          left_sprites,~
** Processing line: ~          front_sprites,~
** Processing line: ~          right_sprites,~
** Processing line: ~        ]~
** Processing line: ~      else~
** Processing line: ~        [~
** Processing line: ~          back_sprites,~
** Processing line: ~          left_sprites,~
** Processing line: ~          right_sprites,~
** Processing line: ~          front_sprites,~
** Processing line: ~        ]~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def tick~
** Processing line: ~      state.z ||= 200~
** Processing line: ~      state.z += inputs.controller_one.right_analog_y_perc~
** Processing line: ~      state.columns ||= 100.map do~
** Processing line: ~        {~
** Processing line: ~          x: rand(12) * 400,~
** Processing line: ~          y: 0,~
** Processing line: ~          z: rand(12) * 400,~
** Processing line: ~        }~
** Processing line: ~      end.sort_by { |col| -col.z }~
** Processing line: ~~
** Processing line: ~      outputs.sprites << state.columns.map do |col|~
** Processing line: ~        citadel(col.x - 640, col.y - 400, state.z - col.z)~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  $game = Game.new~
** Processing line: ~~
** Processing line: ~  def tick_game 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: ~*** 14 Vr - Flappy Vr - credits.txt~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Flappy Vr - 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: ~14 Vr - Flappy Vr - 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/14_vr/07_flappy_vr/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: ~*** 14 Vr - Flappy Vr - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Flappy Vr - 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: ~14 Vr - Flappy Vr - 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/14_vr/07_flappy_vr/app/main.rb~
** Processing line: ~  require 'app/tick.rb'~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    args.gtk.start_server! port: 9001, enable_in_prod: true~
** Processing line: ~    tick_game args~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** 14 Vr - Flappy Vr - tick.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~14 Vr - Flappy Vr - tick.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: ~14 Vr - Flappy Vr - tick.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/14_vr/07_flappy_vr/app/tick.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_starting_point      ||= 640~
** Processing line: ~      state.x                     ||= state.x_starting_point~
** Processing line: ~      state.y                     ||= 500~
** Processing line: ~      state.z                     ||= -120~
** 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, z: -640, text: "Flappy Dragon", size_enum: 50, alignment_enum: 1, **white }~
** Processing line: ~      outputs.labels << { x: 640, y: 500, z: -640, text: "Instructions: Press Spacebar to flap. Don't die.", size_enum: 4, alignment_enum: 1, **white }~
** Processing line: ~      outputs.labels << { x: 430, y: 430, z: -640, text: "[Tab]    Change difficulty", size_enum: 4, alignment_enum: 0, **white }~
** Processing line: ~      outputs.labels << { x: 430, y: 400, z: -640, text: "[Enter]  Start at New Difficulty ", size_enum: 4, alignment_enum: 0, **white }~
** Processing line: ~      outputs.labels << { x: 430, y: 370, z: -640, text: "[Escape] Cancel/Resume ", size_enum: 4, alignment_enum: 0, **white }~
** Processing line: ~      outputs.labels << { x: 640, y: 300, z: -640, text: "(mouse, touch, and game controllers work, too!) ", size_enum: 4, alignment_enum: 1, **white }~
** Processing line: ~      outputs.labels << { x: 640, y: 200, z: -640, text: "Difficulty: #{state.new_difficulty.capitalize}", size_enum: 4, alignment_enum: 1, **white }~
** Processing line: ~~
** Processing line: ~      outputs.labels << { x: 10, y: 100, z: -640, text: "Code:   @amirrajan",     **white }~
** Processing line: ~      outputs.labels << { x: 10, y:  80, z: -640, text: "Art:    @mobypixel",     **white }~
** Processing line: ~      outputs.labels << { x: 10, y:  60, z: -640, text: "Music:  @mobypixel",     **white }~
** Processing line: ~      outputs.labels << { x: 10, y:  40, z: -640, 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 - overlay_rect.w,~
** Processing line: ~                              y: overlay_rect.y - overlay_rect.h,~
** Processing line: ~                              w: overlay_rect.w * 4,~
** Processing line: ~                              h: overlay_rect.h * 2,~
** Processing line: ~                              r: 0, g: 0, b: 0, a: 230 }.solid!~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_game~
** Processing line: ~      outputs.background_color = [0, 0, 0]~
** 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,     z: -120, size_enum: 20, alignment_enum: 1 }~
** Processing line: ~      outputs.labels << { x: 635, y: 360, text: score_text,     z: -120, size_enum: 20, alignment_enum: 1, r: 255, g: 255, b: 255 }~
** Processing line: ~      outputs.labels << { x: 638, y: 428, text: countdown_text, z: -120, size_enum: 20, alignment_enum: 1 }~
** Processing line: ~      outputs.labels << { x: 635, y: 430, text: countdown_text, z: -120, size_enum: 20, alignment_enum: 1, r: 255, g: 255, b: 255 }~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_background~
** 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 << { x: -640, y: -360, z: -640, w: 1280 * 2, h: 720 * 2, path: 'sprites/background.png' }~
** Processing line: ~      outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_back.png',   0.25, 0)~
** Processing line: ~      outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_middle.png', 0.50, 50)~
** Processing line: ~      outputs.sprites << scrolling_background(scroll_point_at, 'sprites/parallax_front.png',  1.00, 100, -80)~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def scrolling_background at, path, rate, z, y = 0~
** Processing line: ~      rate *= 2~
** Processing line: ~      w = 1440 * 2~
** Processing line: ~      h =  720 * 2~
** Processing line: ~      [~
** Processing line: ~        { x: w - at.*(rate) % w - w.half.half, y: y * 2 - 360, z: -640 + z, w: w, h: h, path: path },~
** Processing line: ~        { x: 0 - at.*(rate) % w - w.half.half, y: y * 2 - 360, z: -640 + z, w: w, h: h, path: path },~
** Processing line: ~      ]~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_walls~
** Processing line: ~      state.walls.each do |w|~
** Processing line: ~        w.top_section = { x: w.x,~
** Processing line: ~                          y: w.bottom_height - 720,~
** Processing line: ~                          z: -120,~
** Processing line: ~                          w: 100,~
** Processing line: ~                          h: 720,~
** Processing line: ~                          path: 'sprites/wall.png',~
** Processing line: ~                          angle: 180 }~
** Processing line: ~~
** Processing line: ~        w.bottom_section = { x: w.x,~
** Processing line: ~                             y: w.top_y,~
** Processing line: ~                             z: -120,~
** Processing line: ~                             w: 100,~
** Processing line: ~                             h: 720,~
** Processing line: ~                             path: 'sprites/wallbottom.png',~
** Processing line: ~                             angle: 0}~
** Processing line: ~        w.sprites = [~
** Processing line: ~          model_for(w.top_section),~
** Processing line: ~          model_for(w.bottom_section)~
** Processing line: ~        ]~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      outputs.sprites << state.walls.find_all { |w| w.x >= state.x }.reverse.map(&:sprites)~
** Processing line: ~      outputs.sprites << state.walls.find_all { |w| w.x <  state.x }.map(&:sprites)~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def model_for wall~
** Processing line: ~      ratio = (wall.x - state.x_starting_point).abs.fdiv(2560 + state.x_starting_point)~
** Processing line: ~      z_ratio = ratio ** 2~
** Processing line: ~      z_offset = (2560 * 2) * z_ratio~
** Processing line: ~      x_offset = z_offset * 0.25~
** Processing line: ~~
** Processing line: ~      if wall.x < state.x~
** Processing line: ~        x_offset *= -1~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      a = 255 * (1 - z_ratio)~
** Processing line: ~~
** Processing line: ~      back  = { x:     wall.x + x_offset,~
** Processing line: ~                y:     wall.y,~
** Processing line: ~                z:     wall.z - wall.w.half - z_offset,~
** Processing line: ~                a:     a,~
** Processing line: ~                w:     wall.w,~
** Processing line: ~                h:     wall.h,~
** Processing line: ~                path:  wall.path,~
** Processing line: ~                angle: wall.angle }~
** Processing line: ~      front = { x:     wall.x + x_offset,~
** Processing line: ~                y:     wall.y,~
** Processing line: ~                z:     wall.z + wall.w.half - z_offset,~
** Processing line: ~                a:     a,~
** Processing line: ~                w:     wall.w,~
** Processing line: ~                h:     wall.h,~
** Processing line: ~                path:  wall.path,~
** Processing line: ~                angle: wall.angle }~
** Processing line: ~      left  = { x:     wall.x - wall.w.half + x_offset,~
** Processing line: ~                y:     wall.y,~
** Processing line: ~                z:     wall.z - z_offset,~
** Processing line: ~                a:     a,~
** Processing line: ~                angle_y: 90,~
** Processing line: ~                w:     wall.w,~
** Processing line: ~                h:     wall.h,~
** Processing line: ~                path:  wall.path,~
** Processing line: ~                angle: wall.angle }~
** Processing line: ~      right = { x:     wall.x + wall.w.half + x_offset,~
** Processing line: ~                y:     wall.y,~
** Processing line: ~                z:     wall.z - z_offset,~
** Processing line: ~                a:     a,~
** Processing line: ~                angle_y: 90,~
** Processing line: ~                w:     wall.w,~
** Processing line: ~                h:     wall.h,~
** Processing line: ~                path:  wall.path,~
** Processing line: ~                angle: wall.angle }~
** Processing line: ~      if    (wall.x - wall.w - state.x).abs < 200~
** Processing line: ~        [back, left, right, front]~
** Processing line: ~      elsif wall.x < state.x~
** Processing line: ~        [back, left, front, right]~
** Processing line: ~      else~
** Processing line: ~        [back, right, front, left]~
** Processing line: ~      end~
** 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, z: state.z, 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, z: state.z, 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: ~        state.z     += 0.3~
** 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 < -2560 + state.x_starting_point }~
** 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             = 2560 + state.x_starting_point~
** Processing line: ~        w.opening       = grid.top~
** Processing line: ~                              .randomize(:ratio)~
** Processing line: ~                              .greater(200)~
** Processing line: ~                              .lesser(520)~
** Processing line: ~        w.opening -= w.opening * 0.5~
** 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: ~      { x: state.dragon_sprite.x,~
** Processing line: ~        y: state.dragon_sprite.y,~
** Processing line: ~        w: state.dragon_sprite.w,~
** Processing line: ~        h: state.dragon_sprite.h }~
** 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: ~           .find_all { |w| w.top_section && w.bottom_section }~
** Processing line: ~           .flat_map { |w| [w.top_section, w.bottom_section] }~
** Processing line: ~           .any?     { |s| s.intersect_rect?(dragon_collision_box) }~
** 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.x =  state.x_starting_point~
** Processing line: ~      state.z = -120~
** 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_game 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: ~  $gtk.reset~
** 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 "<NVertices NFaces NEdges> 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 - Shadows - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Platformer - Shadows - 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 - Shadows - 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/shadows/app/main.rb~
** Processing line: ~  class Game~
** Processing line: ~    attr_gtk~
** Processing line: ~~
** Processing line: ~    def tick~
** Processing line: ~      defaults~
** Processing line: ~      input~
** Processing line: ~      calc~
** Processing line: ~      render~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def defaults~
** Processing line: ~      new_game if !state.clock || state.game_over == true~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def input~
** Processing line: ~      input_entity player,~
** Processing line: ~                   find_input_timeline(at: player.clock, key: :left_right),~
** Processing line: ~                   find_input_timeline(at: player.clock, key: :space),~
** Processing line: ~                   find_input_timeline(at: player.clock, key: :down)~
** Processing line: ~~
** Processing line: ~      shadows.find_all { |shadow| entity_active? shadow }~
** Processing line: ~             .each do |shadow|~
** Processing line: ~               input_entity shadow,~
** Processing line: ~                            find_input_timeline(at: shadow.clock, key: :left_right),~
** Processing line: ~                            find_input_timeline(at: shadow.clock, key: :space),~
** Processing line: ~                            find_input_timeline(at: shadow.clock, key: :down)~
** Processing line: ~               end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def input_entity entity, left_right, jump, fall_through~
** Processing line: ~      return if !entity_active? entity~
** Processing line: ~~
** Processing line: ~      entity.dx += left_right~
** Processing line: ~~
** Processing line: ~      if left_right == 0~
** Processing line: ~        if (entity.action == :running)~
** Processing line: ~          entity_set_action! entity, :standing~
** Processing line: ~        end~
** Processing line: ~      elsif entity.left_right != left_right && (entity_on_platform? entity)~
** Processing line: ~        entity_set_action! entity, :running~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      entity.left_right = left_right~
** Processing line: ~~
** Processing line: ~      entity.orientation = if left_right == -1~
** Processing line: ~                             :left~
** Processing line: ~                           elsif left_right == 1~
** Processing line: ~                             :right~
** Processing line: ~                           else~
** Processing line: ~                             entity.orientation~
** Processing line: ~                           end~
** Processing line: ~~
** Processing line: ~      if fall_through && (entity_on_platform? entity)~
** Processing line: ~        entity.jumped_at      = 0~
** Processing line: ~        entity.jumped_down_at = entity.clock~
** Processing line: ~        entity.jump_count    += 1~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      if jump && entity.jump_count < 3~
** Processing line: ~        if entity.jump_count == 0~
** Processing line: ~          entity_set_action! entity, :first_jump~
** Processing line: ~        elsif entity.jump_count == 1~
** Processing line: ~          entity_set_action! entity, :midair_jump~
** Processing line: ~        elsif entity.jump_count == 2~
** Processing line: ~          entity_set_action! entity, :midair_jump~
** Processing line: ~        end~
** Processing line: ~~
** Processing line: ~        entity.dy             = entity.jump_power~
** Processing line: ~        entity.jumped_at      = entity.clock~
** Processing line: ~        entity.jumped_down_at = 0~
** Processing line: ~        entity.jump_count    += 1~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc~
** Processing line: ~      calc_light_meter~
** Processing line: ~      calc_action_history~
** Processing line: ~      calc_entity player~
** Processing line: ~      calc_shadows~
** Processing line: ~      calc_light_crystal~
** Processing line: ~      calc_render_queues~
** Processing line: ~      calc_game_over~
** Processing line: ~      calc_clock~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_light_meter~
** Processing line: ~      state.light_meter -= 1~
** Processing line: ~      d = state.light_meter_queue * 0.1~
** Processing line: ~      state.light_meter += d~
** Processing line: ~      state.light_meter_queue -= d~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_action_history~
** Processing line: ~      state.curr_left_right     = inputs.left_right~
** Processing line: ~      if state.prev_left_right != state.curr_left_right~
** Processing line: ~        state.input_timeline.unshift({ at: state.clock, k: :left_right, v: state.curr_left_right })~
** Processing line: ~      end~
** Processing line: ~      state.prev_left_right = state.curr_left_right~
** Processing line: ~~
** Processing line: ~      state.curr_space     = inputs.keyboard.key_down.space    ||~
** Processing line: ~                             inputs.controller_one.key_down.a  ||~
** Processing line: ~                             inputs.keyboard.key_down.up       ||~
** Processing line: ~                             inputs.controller_one.key_down.b~
** Processing line: ~~
** Processing line: ~      if state.prev_space != state.curr_space~
** Processing line: ~        state.input_timeline.unshift({ at: state.clock, k: :space, v: state.curr_space })~
** Processing line: ~      end~
** Processing line: ~      state.prev_space = state.curr_space~
** Processing line: ~~
** Processing line: ~      state.curr_down     = inputs.keyboard.down || inputs.controller_one.down~
** Processing line: ~      if state.prev_down != state.curr_down~
** Processing line: ~        state.input_timeline.unshift({ at: state.clock, k: :down, v: state.curr_down })~
** Processing line: ~      end~
** Processing line: ~      state.prev_down = state.curr_down~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_entity entity~
** Processing line: ~      calc_entity_rect entity~
** Processing line: ~      return if !entity_active? entity~
** Processing line: ~      calc_entity_collision entity~
** Processing line: ~      calc_entity_action entity~
** Processing line: ~      calc_entity_movement entity~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_entity_rect entity~
** Processing line: ~      entity.render_rect = { x: entity.x, y: entity.y, w: entity.w, h: entity.h }~
** Processing line: ~      entity.rect = entity.render_rect.merge x: entity.render_rect.x + entity.render_rect.w * 0.33,~
** Processing line: ~                                             w: entity.render_rect.w * 0.33~
** Processing line: ~      entity.next_rect = entity.rect.merge x: entity.x + entity.dx,~
** Processing line: ~                                           y: entity.y + entity.dy~
** Processing line: ~      entity.prev_rect = entity.rect.merge x: entity.x - entity.dx,~
** Processing line: ~                                           y: entity.y - entity.dy~
** Processing line: ~      orientation_shift = 0~
** Processing line: ~      if entity.orientation == :right~
** Processing line: ~        orientation_shift = entity.rect.w.half~
** Processing line: ~      end~
** Processing line: ~      entity.hurt_rect  = entity.rect.merge y: entity.rect.y + entity.h * 0.33,~
** Processing line: ~                                            x: entity.rect.x - entity.rect.w.half + orientation_shift,~
** Processing line: ~                                            h: entity.rect.h * 0.33~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_entity_collision entity~
** Processing line: ~      calc_entity_below entity~
** Processing line: ~      calc_entity_left entity~
** Processing line: ~      calc_entity_right entity~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_entity_below entity~
** Processing line: ~      return unless entity.dy < 0~
** Processing line: ~      tiles_below = find_tiles { |t| t.rect.top <= entity.prev_rect.y }~
** Processing line: ~      collision = find_collision tiles_below, (entity.rect.merge y: entity.next_rect.y)~
** Processing line: ~      return unless collision~
** Processing line: ~      can_drop = true~
** Processing line: ~      if entity.last_standing_at && (entity.clock - entity.last_standing_at) < 8~
** Processing line: ~        can_drop = false~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      if can_drop && entity.jumped_down_at.elapsed_time(entity.clock) < 10 && !collision.impassable~
** Processing line: ~        if (entity_on_platform? entity) && can_drop~
** Processing line: ~          entity.dy = -1~
** Processing line: ~        end~
** Processing line: ~~
** Processing line: ~        entity.jump_count = 1~
** Processing line: ~      else~
** Processing line: ~        entity.y  = collision.rect.y + collision.rect.h~
** Processing line: ~        entity.dy = 0~
** Processing line: ~        entity.jump_count = 0~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_entity_left entity~
** Processing line: ~      return unless entity.dx < 0~
** Processing line: ~      return if entity.next_rect.x > 8 - 32~
** Processing line: ~      entity.x  = 8 - 32~
** Processing line: ~      entity.dx = 0~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_entity_right entity~
** Processing line: ~      return unless entity.dx > 0~
** Processing line: ~      return if (entity.next_rect.x + entity.rect.w) < (1280 - 8 - 32)~
** Processing line: ~      entity.x  = (1280 - 8 - entity.rect.w - 32)~
** Processing line: ~      entity.dx = 0~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_entity_action entity~
** Processing line: ~      if entity.dy < 0~
** Processing line: ~        if entity.action == :midair_jump~
** Processing line: ~          if entity_action_complete? entity, state.midair_jump_duration~
** Processing line: ~            entity_set_action! entity, :falling~
** Processing line: ~          end~
** Processing line: ~        else~
** Processing line: ~          entity_set_action! entity, :falling~
** Processing line: ~        end~
** Processing line: ~      elsif entity.dy == 0 && !(entity_on_platform? entity)~
** Processing line: ~        if entity.left_right == 0~
** Processing line: ~          entity_set_action! entity, :standing~
** Processing line: ~        else~
** Processing line: ~          entity_set_action! entity, :running~
** Processing line: ~        end~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_entity_movement entity~
** Processing line: ~      calc_entity_dy entity~
** Processing line: ~      calc_entity_dx entity~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_entity_dx entity~
** Processing line: ~      entity.dx  = entity.dx.clamp(-5,  5)~
** Processing line: ~      entity.dx *= 0.9~
** Processing line: ~      entity.x  += entity.dx~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_entity_dy entity~
** Processing line: ~      entity.y  += entity.dy~
** Processing line: ~      entity.dy += state.gravity~
** Processing line: ~      entity.dy += entity.dy * state.drag ** 2 * -1~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_shadows~
** Processing line: ~      add_shadow! if state.clock.zmod?(300)~
** Processing line: ~~
** Processing line: ~      shadows.each do |shadow|~
** Processing line: ~        calc_entity shadow~
** Processing line: ~        shadow.spawn_countdown -= 1 if shadow.spawn_countdown > 0~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_light_crystal~
** Processing line: ~      light_rect = state.light_crystal~
** Processing line: ~      if player.hurt_rect.intersect_rect? light_rect~
** Processing line: ~        state.jitter_fade_out_render_queue << { x:    state.light_crystal.x,~
** Processing line: ~                                                y:    state.light_crystal.y,~
** Processing line: ~                                                w:    state.light_crystal.w,~
** Processing line: ~                                                h:    state.light_crystal.h,~
** Processing line: ~                                                a:    255,~
** Processing line: ~                                                path: 'sprites/light.png' }~
** Processing line: ~        state.light_meter_queue += 600~
** Processing line: ~        state.light_crystal = new_light_crystal~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_render_queues~
** Processing line: ~      state.jitter_fade_out_render_queue.each do |s|~
** Processing line: ~        new_w = s.w * 1.02 ** 5~
** Processing line: ~        ds = new_w - s.w~
** Processing line: ~        s.w = new_w~
** Processing line: ~        s.h = new_w~
** Processing line: ~        s.x -= ds.half~
** Processing line: ~        s.y -= ds.half~
** Processing line: ~        s.a = s.a * 0.97 ** 5~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      state.jitter_fade_out_render_queue.reject! { |s| s.a <= 1 }~
** Processing line: ~~
** Processing line: ~      state.game_over_render_queue.each { |s| s.a = s.a * 0.95 }~
** Processing line: ~      state.game_over_render_queue.reject! { |s| s.a <= 1 }~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_game_over~
** Processing line: ~      state.game_over = false~
** Processing line: ~      state.game_over ||= shadows.find_all { |s| s.spawn_countdown <= 0 }~
** Processing line: ~                                 .any? { |s| s.hurt_rect.intersect_rect? player.hurt_rect }~
** Processing line: ~~
** Processing line: ~      state.game_over ||= state.light_meter <= 1~
** Processing line: ~~
** Processing line: ~      if inputs.keyboard.key_down.r~
** Processing line: ~        state.you_win = false~
** Processing line: ~        state.game_over = true~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      if state.game_over~
** Processing line: ~        state.you_win = false~
** Processing line: ~        state.game_over = true~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      if state.light_meter >= 6000~
** Processing line: ~        state.you_win = true~
** Processing line: ~        state.game_over = true~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      if state.game_over~
** Processing line: ~        state.game_over_render_queue.concat shadows.map { |s| s.sprite.merge(a: 255) }~
** Processing line: ~        state.game_over_render_queue << player.sprite.merge(a: 255)~
** Processing line: ~        state.game_over_render_queue << state.light_crystal.merge(a: 255, path: 'sprites/light.png', b: 128)~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def calc_clock~
** Processing line: ~      return if state.game_over~
** Processing line: ~      state.clock += 1~
** Processing line: ~      player.clock += 1~
** Processing line: ~      shadows.each { |s| s.clock += 1 if entity_active? s }~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render~
** Processing line: ~      render_stage~
** Processing line: ~      render_light_meter~
** Processing line: ~      render_instructions~
** Processing line: ~      render_render_queues~
** Processing line: ~      render_light_meter_warning~
** Processing line: ~      render_light_crystal~
** Processing line: ~      render_entities~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_stage~
** Processing line: ~      outputs.background_color = [255, 255, 255]~
** Processing line: ~      outputs.sprites << { x: 0,~
** Processing line: ~                           y: 0,~
** Processing line: ~                           w: 1280,~
** Processing line: ~                           h: 720,~
** Processing line: ~                           path: "sprites/stage.png",~
** Processing line: ~                           a: 200 }~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_light_meter~
** Processing line: ~      meter_perc = state.light_meter.fdiv(6000) + (0.002 * rand)~
** Processing line: ~      light_w = (1280 * meter_perc).round~
** Processing line: ~      dark_w  = 1280 - light_w~
** Processing line: ~      outputs.sprites << { x: 0,~
** Processing line: ~                           y: 64.from_top,~
** Processing line: ~                           w: light_w,~
** Processing line: ~                           source_x: 0,~
** Processing line: ~                           source_y: 0,~
** Processing line: ~                           source_w: light_w,~
** Processing line: ~                           source_h: 128,~
** Processing line: ~                           h: 64,~
** Processing line: ~                           path: 'sprites/meter-light.png' }~
** Processing line: ~~
** Processing line: ~      outputs.sprites << { x: 1280 * meter_perc,~
** Processing line: ~                           y: 64.from_top,~
** Processing line: ~                           w: dark_w,~
** Processing line: ~                           source_x: light_w,~
** Processing line: ~                           source_y: 0,~
** Processing line: ~                           source_w: dark_w,~
** Processing line: ~                           source_h: 128,~
** Processing line: ~                           h: 64,~
** Processing line: ~                           path: 'sprites/meter-dark.png' }~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_instructions~
** Processing line: ~      outputs.labels << { x: 640,~
** Processing line: ~                          y: 40,~
** Processing line: ~                          text: '[left/right] to move, [up/space] to jump, [down] to drop through platform',~
** Processing line: ~                          alignment_enum: 1 }~
** Processing line: ~~
** Processing line: ~      if state.you_win~
** Processing line: ~        outputs.labels << { x: 640,~
** Processing line: ~                            y: 40.from_top,~
** Processing line: ~                            text: 'You win!',~
** Processing line: ~                            size_enum: -1,~
** Processing line: ~                            alignment_enum: 1 }~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_render_queues~
** Processing line: ~      outputs.sprites << state.jitter_fade_out_render_queue~
** Processing line: ~      outputs.sprites << state.game_over_render_queue~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_light_meter_warning~
** Processing line: ~      return if state.light_meter >= 255~
** Processing line: ~~
** Processing line: ~      outputs.primitives << { x: 0,~
** Processing line: ~                              y: 0,~
** Processing line: ~                              w: 1280,~
** Processing line: ~                              h: 720,~
** Processing line: ~                              a: 255 - state.light_meter,~
** Processing line: ~                              path: :pixel,~
** Processing line: ~                              r: 0,~
** Processing line: ~                              g: 0,~
** Processing line: ~                              b: 0 }~
** Processing line: ~~
** Processing line: ~      outputs.primitives << { x: state.light_crystal.x - 32,~
** Processing line: ~                              y: state.light_crystal.y - 32,~
** Processing line: ~                              w: 128,~
** Processing line: ~                              h: 128,~
** Processing line: ~                              a: 255 - state.light_meter,~
** Processing line: ~                              path: 'sprites/spotlight.png' }~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_light_crystal~
** Processing line: ~      jitter_sprite = { x: state.light_crystal.x + 5 * rand,~
** Processing line: ~                        y: state.light_crystal.y + 5 * rand,~
** Processing line: ~                        w: state.light_crystal.w + 5 * rand,~
** Processing line: ~                        h: state.light_crystal.h + 5 * rand,~
** Processing line: ~                        path: 'sprites/light.png' }~
** Processing line: ~      outputs.primitives << jitter_sprite~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_entities~
** Processing line: ~      render_entity player, r: 0, g: 0, b: 0~
** Processing line: ~      shadows.each { |shadow| render_entity shadow, g: 0, b: 0 }~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def render_entity entity, r: 255, g: 255, b: 255;~
** Processing line: ~      a = 255~
** Processing line: ~~
** Processing line: ~      entity.sprite = nil~
** Processing line: ~~
** Processing line: ~      if entity.activate_at~
** Processing line: ~        activation_elapsed_time = state.clock - entity.activate_at~
** Processing line: ~        if entity.activate_at > state.clock~
** Processing line: ~          entity.sprite = { x: entity.initial_x + 5 * rand,~
** Processing line: ~                            y: entity.initial_y + 5 * rand,~
** Processing line: ~                            w: 64 + 5 * rand,~
** Processing line: ~                            h: 64 + 5 * rand,~
** Processing line: ~                            path: "sprites/light.png",~
** Processing line: ~                            g: 0, b: 0,~
** Processing line: ~                            a: a }~
** Processing line: ~~
** Processing line: ~          outputs.sprites << entity.sprite~
** Processing line: ~          return~
** Processing line: ~        elsif !entity.activated~
** Processing line: ~          entity.activated = true~
** Processing line: ~          state.jitter_fade_out_render_queue << { x: entity.initial_x + 5 * rand,~
** Processing line: ~                                                  y: entity.initial_y + 5 * rand,~
** Processing line: ~                                                  w: 86 + 5 * rand, h: 86 + 5 * rand,~
** Processing line: ~                                                  path: "sprites/light.png",~
** Processing line: ~                                                  g: 0, b: 0, a: 255 }~
** Processing line: ~        end~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      if entity.action == :standing~
** Processing line: ~        path = "sprites/player/stand.png"~
** Processing line: ~      elsif entity.action == :running~
** Processing line: ~        sprint_index = entity.action_at~
** Processing line: ~                             .frame_index count: 4,~
** Processing line: ~                                          hold_for: 8,~
** Processing line: ~                                          repeat: true,~
** Processing line: ~                                          tick_count_override: entity.clock~
** Processing line: ~        path = "sprites/player/run-#{sprint_index}.png"~
** Processing line: ~      elsif entity.action == :first_jump~
** Processing line: ~        sprint_index = entity.action_at~
** Processing line: ~                             .frame_index count: 2,~
** Processing line: ~                                          hold_for: 8,~
** Processing line: ~                                          repeat: false,~
** Processing line: ~                                          tick_count_override: entity.clock~
** Processing line: ~        path = "sprites/player/jump-#{sprint_index || 1}.png"~
** Processing line: ~      elsif entity.action == :midair_jump~
** Processing line: ~        sprint_index = entity.action_at~
** Processing line: ~                             .frame_index count: state.midair_jump_frame_count,~
** Processing line: ~                                          hold_for: state.midair_jump_hold_for,~
** Processing line: ~                                          repeat: false,~
** Processing line: ~                                          tick_count_override: entity.clock~
** Processing line: ~        path = "sprites/player/midair-jump-#{sprint_index || 8}.png"~
** Processing line: ~      elsif entity.action == :falling~
** Processing line: ~        path = "sprites/player/falling.png"~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      flip_horizontally = true if entity.orientation == :left~
** Processing line: ~      entity.sprite = entity.render_rect.merge path: path,~
** Processing line: ~                                               a: a,~
** Processing line: ~                                               r: r,~
** Processing line: ~                                               g: g,~
** Processing line: ~                                               b: b,~
** Processing line: ~                                               flip_horizontally: flip_horizontally~
** Processing line: ~      outputs.sprites << entity.sprite~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def new_game~
** Processing line: ~      state.clock                   = 0~
** Processing line: ~      state.game_over               = false~
** Processing line: ~      state.gravity                 = -0.4~
** Processing line: ~      state.drag                    = 0.15~
** Processing line: ~~
** Processing line: ~      state.activation_time         = 90~
** Processing line: ~      state.light_meter             = 600~
** Processing line: ~      state.light_meter_queue       = 0~
** Processing line: ~~
** Processing line: ~      state.midair_jump_frame_count = 9~
** Processing line: ~      state.midair_jump_hold_for    = 6~
** Processing line: ~      state.midair_jump_duration    = state.midair_jump_frame_count * state.midair_jump_hold_for~
** Processing line: ~~
** Processing line: ~      state.tiles                   = [~
** Processing line: ~        { impassable: true, x: 0, y: 0, w: 1280, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
** Processing line: ~        { impassable: true, x: 0, y: 0, w: 8, h: 1500, path: :pixel, r: 0, g: 0, b: 0 },~
** Processing line: ~        { impassable: true, x: 1280 - 8, y: 0, w: 8, h: 1500, path: :pixel, r: 0, g: 0, b: 0 },~
** Processing line: ~~
** Processing line: ~        { x: 80 + 320 + 80,            y: 128, w: 320, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
** Processing line: ~        { x: 80 + 320 + 80 + 320 + 80, y: 192, w: 320, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
** Processing line: ~~
** Processing line: ~        { x: 160,                      y: 320, w: 400, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
** Processing line: ~        { x: 160 + 400 + 160,          y: 400, w: 400, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
** Processing line: ~~
** Processing line: ~        { x: 320,                      y: 600, w: 320, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
** Processing line: ~~
** Processing line: ~        { x: 8, y: 500, w: 100, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
** Processing line: ~~
** Processing line: ~        { x: 8, y: 60, w: 100, h: 8, path: :pixel, r: 0, g: 0, b: 0 },~
** Processing line: ~      ]~
** Processing line: ~~
** Processing line: ~      state.player                = new_entity~
** Processing line: ~      state.player.jump_count     = 1~
** Processing line: ~      state.player.jumped_at      = state.player.clock~
** Processing line: ~      state.player.jumped_down_at = 0~
** Processing line: ~~
** Processing line: ~      state.shadows   = []~
** Processing line: ~~
** Processing line: ~      state.input_timeline = [~
** Processing line: ~        { at: 0, k: :left_right, v: inputs.left_right },~
** Processing line: ~        { at: 0, k: :space,      v: false },~
** Processing line: ~        { at: 0, k: :down,       v: false },~
** Processing line: ~      ]~
** Processing line: ~~
** Processing line: ~      state.jitter_fade_out_render_queue   = []~
** Processing line: ~      state.game_over_render_queue       ||= []~
** Processing line: ~~
** Processing line: ~      state.light_crystal = new_light_crystal~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def new_light_crystal~
** Processing line: ~      r = { x: 124 + rand(1000), y: 135 + rand(500), w: 64, h: 64 }~
** Processing line: ~      return new_light_crystal if tiles.any? { |t| t.intersect_rect? r }~
** Processing line: ~      return new_light_crystal if (player.x - r.x).abs < 200~
** Processing line: ~      r~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def entity_active? entity~
** Processing line: ~      return true unless entity.activate_at~
** Processing line: ~      return entity.activate_at <= state.clock~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def add_shadow!~
** Processing line: ~      s = new_entity(from_entity: player)~
** Processing line: ~      s.activate_at = state.clock + state.activation_time * (shadows.length + 1)~
** Processing line: ~      s.spawn_countdown = state.activation_time~
** Processing line: ~      shadows << s~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def find_input_timeline at:, key:;~
** Processing line: ~      state.input_timeline.find { |t| t.at <= at && t.k == key }.v~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def new_entity from_entity: nil~
** Processing line: ~      pe = state.new_entity(:body)~
** Processing line: ~      pe.w                  = 96~
** Processing line: ~      pe.h                  = 96~
** Processing line: ~      pe.jump_power         = 12~
** Processing line: ~      pe.y                  = 500~
** Processing line: ~      pe.x                  = 640 - 8~
** Processing line: ~      pe.initial_x          = pe.x~
** Processing line: ~      pe.initial_y          = pe.y~
** Processing line: ~      pe.dy                 = 0~
** Processing line: ~      pe.dx                 = 0~
** Processing line: ~      pe.jumped_down_at     = 0~
** Processing line: ~      pe.jumped_at          = 0~
** Processing line: ~      pe.jump_count         = 0~
** Processing line: ~      pe.clock              = state.clock~
** Processing line: ~      pe.orientation        = :right~
** Processing line: ~      pe.action             = :falling~
** Processing line: ~      pe.action_at          = state.clock~
** Processing line: ~      pe.left_right         = 0~
** Processing line: ~      if from_entity~
** Processing line: ~        pe.w              = from_entity.w~
** Processing line: ~        pe.h              = from_entity.h~
** Processing line: ~        pe.jump_power     = from_entity.jump_power~
** Processing line: ~        pe.x              = from_entity.x~
** Processing line: ~        pe.y              = from_entity.y~
** Processing line: ~        pe.initial_x      = from_entity.x~
** Processing line: ~        pe.initial_y      = from_entity.y~
** Processing line: ~        pe.dy             = from_entity.dy~
** Processing line: ~        pe.dx             = from_entity.dx~
** Processing line: ~        pe.jumped_down_at = from_entity.jumped_down_at~
** Processing line: ~        pe.jumped_at      = from_entity.jumped_at~
** Processing line: ~        pe.orientation    = from_entity.orientation~
** Processing line: ~        pe.action         = from_entity.action~
** Processing line: ~        pe.action_at      = from_entity.action_at~
** Processing line: ~        pe.jump_count     = from_entity.jump_count~
** Processing line: ~        pe.left_right     = from_entity.left_right~
** Processing line: ~      end~
** Processing line: ~      pe~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def entity_on_platform? entity~
** Processing line: ~      entity.action == :standing || entity.action == :running~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def entity_action_complete? entity, action_duration~
** Processing line: ~      entity.action_at.elapsed_time(entity.clock) + 1 >= action_duration~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def entity_set_action! entity, action~
** Processing line: ~      entity.action = action~
** Processing line: ~      entity.action_at = entity.clock~
** Processing line: ~      entity.last_standing_at = entity.clock if action == :standing~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def player~
** Processing line: ~      state.player~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def shadows~
** Processing line: ~      state.shadows~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def tiles~
** Processing line: ~      state.tiles~
** 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_collision tiles, target~
** Processing line: ~      tiles.find { |t| t.rect.intersect_rect? target }~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def boot args~
** Processing line: ~    $game = Game.new~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    $game.args = args~
** Processing line: ~    $game.tick~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def reset args~
** Processing line: ~    $game = Game.new~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~#+end_src~
- PRE end detected.
** Processing line: ~~
** Processing line: ~~
** Processing line: ~*** Platformer - Shadows - Metadata - ios_metadata.txt~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Platformer - Shadows - Metadata - ios_metadata.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 - Shadows - Metadata - ios_metadata.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/shadows/metadata/ios_metadata.txt~
** Processing line: ~  teamid=L7H57V9CRD~
** Processing line: ~  appid=com.scratchworkdevelopment.sandbox~
** Processing line: ~  appname=DragonRuby~
** Processing line: ~  version=1.0~
** Processing line: ~  devcert=iPhone Developer: Amirali Rajan (P2B6225J87)~
** Processing line: ~  prodcert=~
** 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: ~*** Simulation - Sand Simulation - main.rb~
- H3 detected.
- Determining if line is a header.
- Line contains ~*** ~... gsub-ing empty string
- Formatting line: ~Simulation - Sand Simulation - 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: ~Simulation - Sand Simulation - 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_simulation/sand_simulation/app/main.rb~
** Processing line: ~  class Elements~
** Processing line: ~    def initialize size~
** Processing line: ~      @size = size~
** Processing line: ~      @max_x_ordinal = 1280.idiv size~
** Processing line: ~      @element_lookup = {}~
** Processing line: ~      @elements = []~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def add_element x_ordinal, y_ordinal~
** Processing line: ~      return nil if @element_lookup.dig x_ordinal, y_ordinal~
** Processing line: ~      element = Element.new x_ordinal, y_ordinal, @size~
** Processing line: ~      @elements << element~
** Processing line: ~      rehash_elements~
** Processing line: ~      element~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def tick~
** Processing line: ~      fn.each_send @elements, self, :move_element~
** Processing line: ~      rehash_elements~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def move_element element~
** Processing line: ~      if below_empty?(element) && element.y_ordinal != 0~
** Processing line: ~        element.move  0, -1~
** Processing line: ~      elsif below_left_empty?(element) && element.y_ordinal != 0 && element.x_ordinal != 0~
** Processing line: ~        element.move -1, -1~
** Processing line: ~      elsif below_right_empty?(element) && element.y_ordinal != 0 && element.x_ordinal != @max_x_ordinal~
** Processing line: ~        element.move  1, -1~
** Processing line: ~      end~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def element_count~
** Processing line: ~      @elements.length~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def rehash_elements~
** Processing line: ~      @element_lookup.clear~
** Processing line: ~      fn.each_send @elements, self, :rehash_element~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def rehash_element element~
** Processing line: ~      @element_lookup[element.x_ordinal] ||= {}~
** Processing line: ~      @element_lookup[element.x_ordinal][element.y_ordinal] = element~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def below_empty? e~
** Processing line: ~      return false if e.y_ordinal == 0~
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal]~
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal][e.y_ordinal - 1]~
** Processing line: ~      return false if  @element_lookup[e.x_ordinal][e.y_ordinal - 1]~
** Processing line: ~      return true~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def below_left_empty? e~
** Processing line: ~      return false if e.y_ordinal == 0~
** Processing line: ~      return false if e.x_ordinal == 0~
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal - 1]~
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal - 1][e.y_ordinal - 1]~
** Processing line: ~      return false if  @element_lookup[e.x_ordinal - 1][e.y_ordinal - 1]~
** Processing line: ~      return true~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def below_right_empty? e~
** Processing line: ~      return false if e.y_ordinal == 0~
** Processing line: ~      return false if e.x_ordinal == 256~
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal + 1]~
** Processing line: ~      return true  if !@element_lookup[e.x_ordinal + 1][e.y_ordinal - 1]~
** Processing line: ~      return false if  @element_lookup[e.x_ordinal + 1][e.y_ordinal - 1]~
** Processing line: ~      return true~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  class Element~
** Processing line: ~    attr_sprite~
** Processing line: ~    attr :x_ordinal, :y_ordinal~
** Processing line: ~~
** Processing line: ~    def initialize x_ordinal, y_ordinal, s~
** Processing line: ~      @x_ordinal     = x_ordinal~
** Processing line: ~      @y_ordinal     = y_ordinal~
** Processing line: ~      @s             = s~
** Processing line: ~      @x             = x_ordinal * s~
** Processing line: ~      @y             = y_ordinal * s~
** Processing line: ~      @w             = s~
** Processing line: ~      @h             = s~
** Processing line: ~      @path          = "sprites/sand-element.png"~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def draw_override ffi~
** Processing line: ~      ffi.draw_sprite @x, @y, @w, @h, @path~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def move dx, dy~
** Processing line: ~      @y_ordinal += dy~
** Processing line: ~      @x_ordinal += dx~
** Processing line: ~      @y = @y_ordinal * @s~
** Processing line: ~      @x = @x_ordinal * @s~
** Processing line: ~    end~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  def tick args~
** Processing line: ~    args.state.size        ||= 10~
** Processing line: ~    args.state.mouse_state ||= :up~
** Processing line: ~    @elements              ||= Elements.new args.state.size~
** Processing line: ~~
** Processing line: ~    if args.inputs.mouse.down~
** Processing line: ~      args.state.mouse_state = :held~
** Processing line: ~    elsif args.inputs.mouse.up~
** Processing line: ~      args.state.mouse_state = :released~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    if args.state.mouse_state == :held~
** Processing line: ~      added = @elements.add_element args.inputs.mouse.x.idiv(args.state.size), args.inputs.mouse.y.idiv(args.state.size)~
** Processing line: ~      args.outputs.static_sprites << added if added~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    @elements.tick~
** Processing line: ~~
** Processing line: ~    args.outputs.labels << { x: 30, y: 30.from_top, text: "#{args.gtk.current_framerate.to_sf}" }~
** Processing line: ~    args.outputs.labels << { x: 30, y: 60.from_top, text: "#{@elements.element_count}" }~
** Processing line: ~  end~
** Processing line: ~~
** Processing line: ~  $gtk.reset~
** Processing line: ~  @elements = nil~
** 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: ~** 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: ~  <html>~
** Processing line: ~    <head>~
** Processing line: ~      <meta charset="UTF-8"/>~
** Processing line: ~      <title>DragonRuby Game Toolkit Documentation</title>~
** Processing line: ~      <style>~
** Processing line: ~      pre {~
** Processing line: ~        border: solid 1px silver;~
** Processing line: ~        padding: 10px;~
** Processing line: ~        font-size: 14px;~
** Processing line: ~        white-space: pre-wrap;~
** Processing line: ~        white-space: -moz-pre-wrap;~
** Processing line: ~        white-space: -pre-wrap;~
** Processing line: ~        white-space: -o-pre-wrap;~
** Processing line: ~        word-wrap: break-word;~
** Processing line: ~      }~
** Processing line: ~      </style>~
** Processing line: ~    </head>~
** Processing line: ~    <body>~
** Processing line: ~        <script>~
** Processing line: ~          async function submitForm() {~
** Processing line: ~            const result = await fetch("/dragon/autocomplete/", {~
** Processing line: ~              method: 'POST',~
** Processing line: ~              headers: { 'Content-Type': 'application/json' },~
** Processing line: ~              body: JSON.stringify({ index: document.getElementById("index").value,~
** Processing line: ~                                     text: document.getElementById("text").value }),~
** Processing line: ~            });~
** Processing line: ~            document.getElementById("autocomplete-results").innerHTML = await result.text();~
** Processing line: ~          }~
** Processing line: ~        </script>~
** Processing line: ~        <form>~
** Processing line: ~          <div>index</div>~
** Processing line: ~          <input name="index" id="index" type="text" value="27" />~
** Processing line: ~          <div>code</div>~
** Processing line: ~          <textarea name="text" id="text" rows="30" cols="80">def tick args~
** Processing line: ~    args.state.~
** Processing line: ~  end</textarea>~
** Processing line: ~          <br/>~
** Processing line: ~          <input type="button" value="Get Suggestions" onclick="submitForm();" />~
** Processing line: ~          <span id="success-notification"></span>~
** Processing line: ~        </form>~
** Processing line: ~        <pre id="autocomplete-results">~
** Processing line: ~        </pre>~
** Processing line: ~~
** Processing line: ~      #{links}~
** Processing line: ~    </body>~
** Processing line: ~  </html>~
** 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: ~      <ul>~
** Processing line: ~        <li><a href="/">Home</a></li>~
** Processing line: ~        <li><a href="/docs.html">Docs</a></li>~
** Processing line: ~        <li><a href="/dragon/control_panel/">Control Panel</a></li>~
** Processing line: ~        <li><a href="/dragon/eval/">Console</a></li>~
** Processing line: ~        <li><a href="/dragon/log/">Logs</a></li>~
** Processing line: ~        <li><a href="/dragon/puts/">Puts</a></li>~
** Processing line: ~        <li><a href="/dragon/code/">Code</a></li>~
** Processing line: ~      </ul>~
** 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: ~  <html>~
** Processing line: ~    <head>~
** Processing line: ~      <meta charset="UTF-8"/>~
** Processing line: ~      <title>DragonRuby Game Toolkit Documentation</title>~
** Processing line: ~    </head>~
** Processing line: ~    <body>~
** Processing line: ~      #{links}~
** Processing line: ~    </body>~
** Processing line: ~  </html>~
** 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: ~          "<li><a href=\"/dragon/code/edit/?file=#{f}\">#{f}</a></li>"~
** Processing line: ~        end~
** Processing line: ~        <<-S~
** Processing line: ~  <ul>~
** Processing line: ~    #{links.join("\n")}~
** Processing line: ~  </ul>~
** Processing line: ~  S~
** Processing line: ~      end~
** Processing line: ~~
** Processing line: ~      def get_api_code args, req~
** Processing line: ~        view = <<-S~
** Processing line: ~  <html>~
** Processing line: ~    <head>~
** Processing line: ~      <meta charset="UTF-8"/>~
** Processing line: ~      <title>DragonRuby Game Toolkit Documentation</title>~
** Processing line: ~    </head>~
** Processing line: ~    <body>~
** Processing line: ~      #{source_code_links args}~
** Processing line: ~~
** Processing line: ~      #{links}~
** Processing line: ~    </body>~
** Processing line: ~  </html>~
** 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: ~  <html>~
** Processing line: ~    <head>~
** Processing line: ~      <meta charset="UTF-8"/>~
** Processing line: ~      <title>DragonRuby Game Toolkit Documentation</title>~
** Processing line: ~    </head>~
** Processing line: ~    <body>~
** Processing line: ~        <script>~
** Processing line: ~          async function submitForm() {~
** Processing line: ~            const result = await fetch("/dragon/code/update/?file=#{file}", {~
** Processing line: ~              method: 'POST',~
** Processing line: ~              headers: { 'Content-Type': 'application/json' },~
** Processing line: ~              body: JSON.stringify({ code: document.getElementById("code").value }),~
** Processing line: ~            });~
** Processing line: ~            document.getElementById("success-notification").innerHTML = "update successful";~
** Processing line: ~            setTimeout(function() { document.getElementById("success-notification").innerHTML = ""; }, 3000);~
** Processing line: ~          }~
** Processing line: ~        </script>~
** Processing line: ~        <form>~
** Processing line: ~          <div><code>#{file}:</code></div>~
** Processing line: ~          <textarea name="code" id="code" rows="30" cols="80">#{args.gtk.read_file file}</textarea>~
** Processing line: ~          <br/>~
** Processing line: ~          <input type="button" value="Update" onclick="submitForm();" />~
** Processing line: ~          <span id="success-notification"></span>~
** Processing line: ~        </form>~
** Processing line: ~      #{source_code_links args}~
** Processing line: ~~
** Processing line: ~      #{links}~
** Processing line: ~    </body>~
** Processing line: ~  </html>~
** 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: ~  <html lang="en">~
** Processing line: ~    <head><title>Eval</title></head>~
** Processing line: ~    <style>~
** Processing line: ~    pre {~
** Processing line: ~      border: solid 1px silver;~
** Processing line: ~      padding: 10px;~
** Processing line: ~      font-size: 14px;~
** Processing line: ~      white-space: pre-wrap;~
** Processing line: ~      white-space: -moz-pre-wrap;~
** Processing line: ~      white-space: -pre-wrap;~
** Processing line: ~      white-space: -o-pre-wrap;~
** Processing line: ~      word-wrap: break-word;~
** Processing line: ~    }~
** Processing line: ~    </style>~
** Processing line: ~    <body>~
** Processing line: ~      <script>~
** Processing line: ~        async function submitForm() {~
** Processing line: ~            const result = await fetch("/dragon/eval/", {~
** Processing line: ~              method: 'POST',~
** Processing line: ~              headers: { 'Content-Type': 'application/json' },~
** Processing line: ~              body: JSON.stringify({ code: document.getElementById("code").value }),~
** Processing line: ~            });~
** Processing line: ~            document.getElementById("eval-result").innerHTML = await result.text();~
** Processing line: ~        }~
** Processing line: ~      </script>~
** Processing line: ~      <form>~
** Processing line: ~        <textarea name="code" id="code" rows="10" cols="80"># write your code here and set $result.\n$result = $gtk.args.state</textarea>~
** Processing line: ~        <br/>~
** Processing line: ~        <input type="button" onclick="submitForm();" value="submit" />~
** Processing line: ~      </form>~
** Processing line: ~      <pre>curl -H "Content-Type: application/json" --data '{ "code": "$result = $args.state" }' -X POST http://localhost:9001/dragon/eval/</pre>~
** Processing line: ~      <div>Eval Result:</div>~
** Processing line: ~      <pre id="eval-result"></pre>~
** Processing line: ~      #{links}~
** Processing line: ~    </body>~
** Processing line: ~  </html>~
** 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: ~  <html lang="en">~
** Processing line: ~    <head><title>console</title></head>~
** Processing line: ~    <body>~
** Processing line: ~      <script>~
** Processing line: ~        async function submitForm(url) {~
** Processing line: ~          const result = await fetch(url, {~
** Processing line: ~            method: 'POST',~
** Processing line: ~            headers: { 'Content-Type': 'application/json' },~
** Processing line: ~            body: JSON.stringify({}),~
** Processing line: ~          });~
** Processing line: ~          document.getElementById("success-notification").innerHTML = "successful";~
** Processing line: ~          setTimeout(function() { document.getElementById("success-notification").innerHTML = ""; }, 3000);~
** Processing line: ~        }~
** Processing line: ~      </script>~
** Processing line: ~      <form>~
** Processing line: ~        <input type="button" value="Show Console" onclick="submitForm('/dragon/show_console/')" />~
** Processing line: ~      </form>~
** Processing line: ~      <form>~
** Processing line: ~        <input type="button" value="Reset Game" onclick="submitForm('/dragon/reset/');" />~
** Processing line: ~      </form>~
** Processing line: ~      <form>~
** Processing line: ~        <input type="button" value="Record Gameplay" onclick="submitForm('/dragon/record/');" />~
** Processing line: ~      </form>~
** Processing line: ~      <form>~
** Processing line: ~        <input type="button" value="Stop Recording" onclick="submitForm('/dragon/record_stop/');" />~
** Processing line: ~      </form>~
** Processing line: ~      <form>~
** Processing line: ~        <input type="button" value="Replay Recording" onclick="submitForm('/dragon/replay/');" />~
** Processing line: ~      </form>~
** Processing line: ~      <div id="success-notification"></div>~
** Processing line: ~      #{links}~
** Processing line: ~    </body>~
** Processing line: ~  </html>~
** 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: ~                  :angle_x, :angle_y, :z,~
** Processing line: ~                  :source_x, :source_y, :source_w, :source_h, :blendmode_enum,~
** Processing line: ~                  :source_x2, :source_y2, :source_x3, :source_y3, :x2, :y2, :x3, :y3~
** 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: ~      attr :key_down~
** Processing line: ~      attr :key_up~
** Processing line: ~      attr :key_held~
** Processing line: ~~
** Processing line: ~      attr :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: ~      attr :connected~
** 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: ~        @connected = false~
** 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: ~#+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: ~    class Inputs~
** Processing line: ~      attr_reader :controllers~
** Processing line: ~      attr_reader :keyboard~
** Processing line: ~      attr_reader :mouse~
** Processing line: ~      attr_accessor :http_requests~
** Processing line: ~      attr_reader :touch~
** Processing line: ~      attr_accessor :finger_one, :finger_two~
** Processing line: ~      attr_accessor :finger_left, :finger_right~
** 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. This is the NAME of the certificate as it's displayed in Keychain Access.~
** Processing line: ~  devcert=~
** Processing line: ~  # prodcert is the certificate to use for distribution to the app store. This is the NAME of the certificate as it's displayed in Keychain Access.~
** 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? '</plist>'~
** Processing line: ~            '</plist>'~
** Processing line: ~          elsif l.include? "Apple Inc."~
** Processing line: ~            nil~
** Processing line: ~          elsif l.include? '<data>'~
** 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 !cli_app_exist?(ideviceinstaller_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 ideviceinstaller`.",~
** Processing line: ~           { w: 500, h: 91, path: get_reserved_sprite("brew-install-ideviceinstaller.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 ideviceinstaller_cli_app~
** Processing line: ~      "ideviceinstaller"~
** 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: ~  <?xml version="1.0" encoding="UTF-8"?>~
** Processing line: ~  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
** Processing line: ~  <plist version="1.0">~
** Processing line: ~          <dict>~
** Processing line: ~                  <key>application-identifier</key>~
** Processing line: ~                  <string>:app_id</string>~
** Processing line: ~                  <key>beta-reports-active</key>~
** Processing line: ~                  <true/>~
** Processing line: ~          </dict>~
** Processing line: ~  </plist>~
** Processing line: ~  XML~
** Processing line: ~      else~
** Processing line: ~        entitlement_plist_string = <<-XML~
** Processing line: ~  <?xml version="1.0" encoding="UTF-8"?>~
** Processing line: ~  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
** Processing line: ~  <plist version="1.0">~
** Processing line: ~          <dict>~
** Processing line: ~                  <key>application-identifier</key>~
** Processing line: ~                  <string>:app_id</string>~
** Processing line: ~                  <key>get-task-allow</key>~
** Processing line: ~                  <true/>~
** Processing line: ~          </dict>~
** Processing line: ~  </plist>~
** 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/#{@app_name}\""~
** Processing line: ~~
** Processing line: ~      @code_sign_completed = true~
** 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: ~  <?xml version="1.0" encoding="UTF-8"?>~
** Processing line: ~  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
** Processing line: ~  <plist version="1.0">~
** Processing line: ~  <dict>~
** Processing line: ~          <key>NSAppTransportSecurity</key>~
** Processing line: ~          <dict>~
** Processing line: ~                  <key>NSAllowsArbitraryLoads</key>~
** Processing line: ~                  <true/>~
** Processing line: ~                  <key>NSExceptionDomains</key>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>google.com</key>~
** Processing line: ~                          <dict>~
** Processing line: ~                                  <key>NSExceptionAllowsInsecureHTTPLoads</key>~
** Processing line: ~                                  <true/>~
** Processing line: ~                                  <key>NSIncludesSubdomains</key>~
** Processing line: ~                                  <true/>~
** Processing line: ~                          </dict>~
** Processing line: ~                  </dict>~
** Processing line: ~          </dict>~
** Processing line: ~          <key>BuildMachineOSBuild</key>~
** Processing line: ~          <string>20D91</string>~
** Processing line: ~          <key>CFBundleDevelopmentRegion</key>~
** Processing line: ~          <string>en</string>~
** Processing line: ~          <key>CFBundleDisplayName</key>~
** Processing line: ~          <string>:app_name</string>~
** Processing line: ~          <key>CFBundleExecutable</key>~
** Processing line: ~          <string>:app_name</string>~
** Processing line: ~          <key>CFBundleIconFiles</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <string>AppIcon60x60</string>~
** Processing line: ~          </array>~
** Processing line: ~          <key>CFBundleIcons</key>~
** Processing line: ~          <dict>~
** Processing line: ~                  <key>CFBundlePrimaryIcon</key>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>CFBundleIconFiles</key>~
** Processing line: ~                          <array>~
** Processing line: ~                                  <string>AppIcon60x60</string>~
** Processing line: ~                          </array>~
** Processing line: ~                          <key>CFBundleIconName</key>~
** Processing line: ~                          <string>AppIcon</string>~
** Processing line: ~                  </dict>~
** Processing line: ~          </dict>~
** Processing line: ~          <key>CFBundleIcons~ipad</key>~
** Processing line: ~          <dict>~
** Processing line: ~                  <key>CFBundlePrimaryIcon</key>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>CFBundleIconFiles</key>~
** Processing line: ~                          <array>~
** Processing line: ~                                  <string>AppIcon60x60</string>~
** Processing line: ~                                  <string>AppIcon76x76</string>~
** Processing line: ~                                  <string>AppIcon83.5x83.5</string>~
** Processing line: ~                          </array>~
** Processing line: ~                          <key>CFBundleIconName</key>~
** Processing line: ~                          <string>AppIcon</string>~
** Processing line: ~                  </dict>~
** Processing line: ~          </dict>~
** Processing line: ~          <key>CFBundleIdentifier</key>~
** Processing line: ~          <string>:app_id</string>~
** Processing line: ~          <key>CFBundleInfoDictionaryVersion</key>~
** Processing line: ~          <string>:app_version</string>~
** Processing line: ~          <key>CFBundleName</key>~
** Processing line: ~          <string>:app_name</string>~
** Processing line: ~          <key>CFBundlePackageType</key>~
** Processing line: ~          <string>APPL</string>~
** Processing line: ~          <key>CFBundleShortVersionString</key>~
** Processing line: ~          <string>:app_version</string>~
** Processing line: ~          <key>CFBundleSignature</key>~
** Processing line: ~          <string>????</string>~
** Processing line: ~          <key>CFBundleSupportedPlatforms</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <string>iPhoneOS</string>~
** Processing line: ~          </array>~
** Processing line: ~          <key>CFBundleVersion</key>~
** Processing line: ~          <string>:app_version</string>~
** Processing line: ~          <key>DTCompiler</key>~
** Processing line: ~          <string>com.apple.compilers.llvm.clang.1_0</string>~
** Processing line: ~          <key>DTPlatformBuild</key>~
** Processing line: ~          <string>18D46</string>~
** Processing line: ~          <key>DTPlatformName</key>~
** Processing line: ~          <string>iphoneos</string>~
** Processing line: ~          <key>DTPlatformVersion</key>~
** Processing line: ~          <string>14.4</string>~
** Processing line: ~          <key>DTSDKBuild</key>~
** Processing line: ~          <string>18D46</string>~
** Processing line: ~          <key>DTSDKName</key>~
** Processing line: ~          <string>iphoneos14.4</string>~
** Processing line: ~          <key>DTXcode</key>~
** Processing line: ~          <string>0124</string>~
** Processing line: ~          <key>DTXcodeBuild</key>~
** Processing line: ~          <string>12D4e</string>~
** Processing line: ~          <key>MinimumOSVersion</key>~
** Processing line: ~          <string>14.4</string>~
** Processing line: ~          <key>UIAppFonts</key>~
** Processing line: ~          <array/>~
** Processing line: ~          <key>UIBackgroundModes</key>~
** Processing line: ~          <array/>~
** Processing line: ~          <key>UIDeviceFamily</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <integer>1</integer>~
** Processing line: ~                  <integer>2</integer>~
** Processing line: ~          </array>~
** Processing line: ~          <key>UILaunchImages</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
** Processing line: ~                          <string>7.0</string>~
** Processing line: ~                          <key>UILaunchImageName</key>~
** Processing line: ~                          <string>Default-568h@2x</string>~
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
** Processing line: ~                          <string>Portrait</string>~
** Processing line: ~                          <key>UILaunchImageSize</key>~
** Processing line: ~                          <string>{320, 568}</string>~
** Processing line: ~                  </dict>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
** Processing line: ~                          <string>7.0</string>~
** Processing line: ~                          <key>UILaunchImageName</key>~
** Processing line: ~                          <string>Default-667h@2x</string>~
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
** Processing line: ~                          <string>Portrait</string>~
** Processing line: ~                          <key>UILaunchImageSize</key>~
** Processing line: ~                          <string>{375, 667}</string>~
** Processing line: ~                  </dict>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
** Processing line: ~                          <string>7.0</string>~
** Processing line: ~                          <key>UILaunchImageName</key>~
** Processing line: ~                          <string>Default-736h@3x</string>~
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
** Processing line: ~                          <string>Portrait</string>~
** Processing line: ~                          <key>UILaunchImageSize</key>~
** Processing line: ~                          <string>{414, 736}</string>~
** Processing line: ~                  </dict>~
** Processing line: ~          </array>~
** Processing line: ~          <key>UILaunchStoryboardName</key>~
** Processing line: ~          <string>SimpleSplash</string>~
** Processing line: ~          <key>UIRequiredDeviceCapabilities</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <string>arm64</string>~
** Processing line: ~          </array>~
** Processing line: ~          <key>UIRequiresFullScreen</key>~
** Processing line: ~          <true/>~
** Processing line: ~          <key>UIStatusBarStyle</key>~
** Processing line: ~          <string>UIStatusBarStyleDefault</string>~
** Processing line: ~          <key>UISupportedInterfaceOrientations</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <string>UIInterfaceOrientationLandscapeRight</string>~
** Processing line: ~          </array>~
** Processing line: ~  </dict>~
** Processing line: ~  </plist>~
** Processing line: ~  XML~
** Processing line: ~~
** Processing line: ~      # <string>UIInterfaceOrientationPortrait</string>~
** Processing line: ~      # <string>UIInterfaceOrientationLandscapeRight</string>~
** 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: ~  <?xml version="1.0" encoding="UTF-8"?>~
** Processing line: ~  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">~
** Processing line: ~  <plist version="1.0">~
** Processing line: ~  <dict>~
** Processing line: ~          <key>BuildMachineOSBuild</key>~
** Processing line: ~          <string>20D91</string>~
** Processing line: ~          <key>CFBundleDevelopmentRegion</key>~
** Processing line: ~          <string>en</string>~
** Processing line: ~          <key>CFBundleDisplayName</key>~
** Processing line: ~          <string>:app_name</string>~
** Processing line: ~          <key>CFBundleExecutable</key>~
** Processing line: ~          <string>:app_name</string>~
** Processing line: ~          <key>CFBundleIconFiles</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <string>AppIcon60x60</string>~
** Processing line: ~          </array>~
** Processing line: ~          <key>CFBundleIcons</key>~
** Processing line: ~          <dict>~
** Processing line: ~                  <key>CFBundlePrimaryIcon</key>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>CFBundleIconFiles</key>~
** Processing line: ~                          <array>~
** Processing line: ~                                  <string>AppIcon60x60</string>~
** Processing line: ~                          </array>~
** Processing line: ~                          <key>CFBundleIconName</key>~
** Processing line: ~                          <string>AppIcon</string>~
** Processing line: ~                  </dict>~
** Processing line: ~          </dict>~
** Processing line: ~          <key>CFBundleIcons~ipad</key>~
** Processing line: ~          <dict>~
** Processing line: ~                  <key>CFBundlePrimaryIcon</key>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>CFBundleIconFiles</key>~
** Processing line: ~                          <array>~
** Processing line: ~                                  <string>AppIcon60x60</string>~
** Processing line: ~                                  <string>AppIcon76x76</string>~
** Processing line: ~                                  <string>AppIcon83.5x83.5</string>~
** Processing line: ~                          </array>~
** Processing line: ~                          <key>CFBundleIconName</key>~
** Processing line: ~                          <string>AppIcon</string>~
** Processing line: ~                  </dict>~
** Processing line: ~          </dict>~
** Processing line: ~          <key>CFBundleIdentifier</key>~
** Processing line: ~          <string>:app_id</string>~
** Processing line: ~          <key>CFBundleInfoDictionaryVersion</key>~
** Processing line: ~          <string>:app_version</string>~
** Processing line: ~          <key>CFBundleName</key>~
** Processing line: ~          <string>:app_name</string>~
** Processing line: ~          <key>CFBundlePackageType</key>~
** Processing line: ~          <string>APPL</string>~
** Processing line: ~          <key>CFBundleShortVersionString</key>~
** Processing line: ~          <string>:app_version</string>~
** Processing line: ~          <key>CFBundleSignature</key>~
** Processing line: ~          <string>????</string>~
** Processing line: ~          <key>CFBundleSupportedPlatforms</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <string>iPhoneOS</string>~
** Processing line: ~          </array>~
** Processing line: ~          <key>CFBundleVersion</key>~
** Processing line: ~          <string>:app_version</string>~
** Processing line: ~          <key>DTCompiler</key>~
** Processing line: ~          <string>com.apple.compilers.llvm.clang.1_0</string>~
** Processing line: ~          <key>DTPlatformBuild</key>~
** Processing line: ~          <string>18D46</string>~
** Processing line: ~          <key>DTPlatformName</key>~
** Processing line: ~          <string>iphoneos</string>~
** Processing line: ~          <key>DTPlatformVersion</key>~
** Processing line: ~          <string>14.4</string>~
** Processing line: ~          <key>DTSDKBuild</key>~
** Processing line: ~          <string>18D46</string>~
** Processing line: ~          <key>DTSDKName</key>~
** Processing line: ~          <string>iphoneos14.4</string>~
** Processing line: ~          <key>DTXcode</key>~
** Processing line: ~          <string>0124</string>~
** Processing line: ~          <key>DTXcodeBuild</key>~
** Processing line: ~          <string>12D4e</string>~
** Processing line: ~          <key>MinimumOSVersion</key>~
** Processing line: ~          <string>14.4</string>~
** Processing line: ~          <key>UIAppFonts</key>~
** Processing line: ~          <array/>~
** Processing line: ~          <key>UIBackgroundModes</key>~
** Processing line: ~          <array/>~
** Processing line: ~          <key>UIDeviceFamily</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <integer>1</integer>~
** Processing line: ~                  <integer>2</integer>~
** Processing line: ~          </array>~
** Processing line: ~          <key>UILaunchImages</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
** Processing line: ~                          <string>7.0</string>~
** Processing line: ~                          <key>UILaunchImageName</key>~
** Processing line: ~                          <string>Default-568h@2x</string>~
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
** Processing line: ~                          <string>Portrait</string>~
** Processing line: ~                          <key>UILaunchImageSize</key>~
** Processing line: ~                          <string>{320, 568}</string>~
** Processing line: ~                  </dict>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
** Processing line: ~                          <string>7.0</string>~
** Processing line: ~                          <key>UILaunchImageName</key>~
** Processing line: ~                          <string>Default-667h@2x</string>~
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
** Processing line: ~                          <string>Portrait</string>~
** Processing line: ~                          <key>UILaunchImageSize</key>~
** Processing line: ~                          <string>{375, 667}</string>~
** Processing line: ~                  </dict>~
** Processing line: ~                  <dict>~
** Processing line: ~                          <key>UILaunchImageMinimumOSVersion</key>~
** Processing line: ~                          <string>7.0</string>~
** Processing line: ~                          <key>UILaunchImageName</key>~
** Processing line: ~                          <string>Default-736h@3x</string>~
** Processing line: ~                          <key>UILaunchImageOrientation</key>~
** Processing line: ~                          <string>Portrait</string>~
** Processing line: ~                          <key>UILaunchImageSize</key>~
** Processing line: ~                          <string>{414, 736}</string>~
** Processing line: ~                  </dict>~
** Processing line: ~          </array>~
** Processing line: ~          <key>UILaunchStoryboardName</key>~
** Processing line: ~          <string>SimpleSplash</string>~
** Processing line: ~          <key>UIRequiredDeviceCapabilities</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <string>arm64</string>~
** Processing line: ~          </array>~
** Processing line: ~          <key>UIRequiresFullScreen</key>~
** Processing line: ~          <true/>~
** Processing line: ~          <key>UIStatusBarStyle</key>~
** Processing line: ~          <string>UIStatusBarStyleDefault</string>~
** Processing line: ~          <key>UISupportedInterfaceOrientations</key>~
** Processing line: ~          <array>~
** Processing line: ~                  <string>UIInterfaceOrientationLandscapeRight</string>~
** Processing line: ~          </array>~
** Processing line: ~  </dict>~
** Processing line: ~  </plist>~
** Processing line: ~  XML~
** Processing line: ~~
** Processing line: ~      # <string>UIInterfaceOrientationPortrait</string>~
** Processing line: ~      # <string>UIInterfaceOrientationLandscapeRight</string>~
** 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: ~      sh %Q[rm -rf "#{app_path}/metadata"]~
** 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 "mv \"#{tmp_directory}/#{@app_name}.app/Runtime\" \"#{tmp_directory}/#{@app_name}.app/#{@app_name}\""~
** 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: ~      sh %Q[cp -r "#{root_folder}/metadata/" "#{app_path}/metadata/"]~
** 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 "#{app_path}/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 "ideviceinstaller -i \"#{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)~
** Processing line: ~        return nil~
** Processing line: ~      else~
** Processing line: ~        return self.elapsed_time(tick_count_override).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: ~    def cos~
** Processing line: ~      Math.cos self.to_radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def cos_r~
** Processing line: ~      Math.cos self~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def cos_d~
** Processing line: ~      Math.cos self.to_radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def sin~
** Processing line: ~      Math.sin self.to_radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def sin_r~
** Processing line: ~      Math.sin self~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def sin_d~
** 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: ~~
** Processing line: ~    def sin~
** Processing line: ~      Math.sin self.to_radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def cos~
** Processing line: ~      Math.cos self.to_radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def sin_r~
** Processing line: ~      Math.sin self~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def sin_d~
** Processing line: ~      Math.sin self.to_radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def cos_r~
** Processing line: ~      Math.cos self~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def cos_d~
** Processing line: ~      Math.cos self.to_radians~
** 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_write_file~
** 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: ~                                                                write_file_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: ~        local_state.http_boot_debounce ||= 0~
** Processing line: ~        local_state.http_boot_debounce  -= 1~
** Processing line: ~        local_state.http_boot_debounce   = local_state.http_boot_debounce.clamp(0, 120)~
** Processing line: ~        return if local_state.http_boot_debounce > 0~
** 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: ~          local_state.http_boot_debounce = 120~
** 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: ~          local_state.write_file_queue << { path: file_key, text: 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: ~~
** Processing line: ~      def tick_write_file~
** Processing line: ~        local_state.write_file_queue.each do |h|~
** Processing line: ~          $gtk.write_file h[:path], h[:text]~
** Processing line: ~        end~
** Processing line: ~~
** Processing line: ~        local_state.write_file_queue.clear~
** 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: ~            w = s.w~
** Processing line: ~            h = s.h~
** Processing line: ~            if !w && !h~
** Processing line: ~              @ffi_draw.draw_triangle s.x, s.y, s.x2, s.y2, s.x3, s.y3,~
** Processing line: ~                                      s.r, s.g, s.b, s.a,~
** Processing line: ~                                      nil, nil, nil, nil, nil, nil, nil,~
** Processing line: ~                                      (s.blendmode_enum || 1)~
** Processing line: ~            else~
** Processing line: ~              @ffi_draw.draw_solid_2 s.x, s.y, w, h,~
** Processing line: ~                                     s.r, s.g, s.b, s.a,~
** Processing line: ~                                     (s.blendmode_enum || 1)~
** Processing line: ~            end~
** 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: ~            w = s.w~
** Processing line: ~            h = s.h~
** Processing line: ~            if !w && !h~
** Processing line: ~              @ffi_draw.draw_triangle s.x, s.y, s.x2, s.y2, s.x3, s.y3,~
** Processing line: ~                                      s.r || 255,~
** Processing line: ~                                      s.g || 255,~
** Processing line: ~                                      s.b || 255,~
** Processing line: ~                                      s.a || 255,~
** Processing line: ~                                      s.path || 'pixel',~
** Processing line: ~                                      s.source_x,~
** Processing line: ~                                      s.source_y,~
** Processing line: ~                                      s.source_x2,~
** Processing line: ~                                      s.source_y2,~
** Processing line: ~                                      s.source_x3,~
** Processing line: ~                                      s.source_y3,~
** Processing line: ~                                      (s.blendmode_enum || 1)~
** Processing line: ~            else~
** Processing line: ~              @ffi_draw.draw_sprite_4 s.x, s.y, w, h,~
** Processing line: ~                                      (s.path || 'pixel').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: ~          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: ~~
** Processing line: ~        def draw_primitive p~
** Processing line: ~          return unless p~
** Processing line: ~~
** Processing line: ~          if p.primitive_marker == :solid~
** Processing line: ~            return draw_solid p~
** Processing line: ~          elsif p.primitive_marker == :sprite~
** Processing line: ~            return draw_sprite p~
** Processing line: ~          elsif p.primitive_marker == :label~
** Processing line: ~            return draw_label p~
** Processing line: ~          elsif p.primitive_marker == :line~
** Processing line: ~            return draw_line p~
** Processing line: ~          elsif p.primitive_marker == :border~
** Processing line: ~            return draw_border p~
** Processing line: ~          else~
** Processing line: ~            raise <<-S~
** Processing line: ~  * ERROR:~
** Processing line: ~  #{p}~
** Processing line: ~~
** Processing line: ~  I don't know how to use the above #{p.class} with SDL's FFI. Please~
** Processing line: ~  add a method on the object called ~primitive_marker~ that~
** Processing line: ~  returns :solid, :sprite, :label, :line, or :border. If the object~
** Processing line: ~  is a Hash, please add { primitive_marker: :PRIMITIVE_SYMBOL } to the Hash.~
** Processing line: ~~
** Processing line: ~  S~
** Processing line: ~          end~
** 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: ~  triangles:  #{@args.outputs.triangles.length}, #{@args.outputs.static_triangles.length}~
** 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/args_docs.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/runtime_docs.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.no_clear! render_target_name~
** Processing line: ~      $args.outputs[:render_target_name].clear_before_render = false~
** 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: ~~
** Processing line: ~    def $top_level.sin_r radians~
** Processing line: ~      Math.sin radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def $top_level.cos_r radians~
** Processing line: ~      Math.cos radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def $top_level.sin degrees~
** Processing line: ~      Math.sin degrees.to_radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def $top_level.cos degrees~
** Processing line: ~      Math.cos degrees.to_radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def $top_level.sin_d degrees~
** Processing line: ~      Math.sin degrees.to_radians~
** Processing line: ~    end~
** Processing line: ~~
** Processing line: ~    def $top_level.cos_d degrees~
** Processing line: ~      Math.cos degrees.to_radians~
** 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.