Fixed an issue that actually only occurs on one frame of the fill animation. This happens when a wire goes to the “filled” state, but the neighbor wires have not yet begun filling. Since the wire is filled, it doesn’t make any connections to neighbors that don’t have the same flow value. Since the neighbor doesn’t have a flow value initialized yet (assuming it is defaulted to zero), it’s flow value doesn’t not match the flow value of the wire that just completed filling, therefore it will not be connected. However, on the next frame the empty wire will begin filling, using the flow value of the filled wire which will make it connected again. This flicker was quick, but it was noticeable. Therefore, I added special checks for this case, and made the wires connected in this one frame case.
The Night the Music Died
Used the Pause method on the MediaPlayer to pause the music when the pause screen is active. Unfortunately, there is no MediaPlayer property to determine if the music is paused, so I had to create a new variable to track if the music was paused. I simply want to resume if the GameLevelScreen is coming from the pause state, but I want it to start playing anew if it is coming from the title screen or level select. Also had to set this pause variable to false if the user quit from the pause menu to the main menu, otherwise it would still think that the music just needs to be resumed. When that happened, it would try to Resume the title screen music when the level started. The title screen music would just continue to play during the level, and the level music would never start.
Overloaded the drawRaisedString method, so that it now takes six arguments with the last being a boolean signifying if the text should be horizontally centered at the point passed as a parameter. The drawing code is now in the six parameter method, and the five parameter method of the same name just calls the six parameter method with the boolean set to false. This will keep me from having to change every line of code in the game that uses the drawRaisedString method. Plus, I just add “true” as an extra parameter for the text that does need to be centered.
Fixed the background colors for level 4 (yellow) and 5 (green) so those aren’t so bright. Also created a standard method in the LevelDefinition class that returns the background color, since that color was previously being determined in two different locations. Updated those locations to use this new standard method.
Added columns of stars in the background which scroll if the player achieves the star rank (S Rank in all three categories at once). Stars in the even number columns scroll in the opposite direction of the stars in the odd number columns. I used Inkscape to make the stars since there was no easy way to make a star shape in Gimp. Then, I just took a screenshot (PrintScreen button) and pasted into Gimp, because copy-and-paste from InkScape to Gimp doesn’t work. I then used the fuzzy select tool to select the star, set the selected star region to white, inverted the select and set the remaining to transparent (after adding transparency to the layer).
One thing that I do like about C Sharp is that after some research, I found that structures (such as Vector2) can be passed by either value or reference. At first I found it passed by value, when I tried to pass my star position to the getStarPosition method, but it left the position at the original value after the method completed. Then I found that just using the ref keyword in the method parameter list and in the method call will make it pass the Vector2 by reference, which allows the method to modify the original Vector2 passed to the method. This was necessary for me to make a trailing star effect, for the blinking stars that circle the results. After trying a few different things, I thought the best look was two groups of three stars that circled the result screen. Also, the yellow alternates between the three stars in each group.
I also added a glow effect, so that the wire transitioned from yellow to white (four different shades) every 15 frames. I didn’t like how it looked, so I just set it back to solid yellow.
Using the sprite scale parameter, I was able to make a light layover expand inside of the LED circle. This gives the appearance that the LED is filling up. The default color for an LED was set to light gray (previously white) to give a better contrast between the expanding yellow inner circle sprite and the rest of the LED sprite.