Wednesday, October 16, 2019

What I've been up to

Just before the initial public release of Productive Game 2 - Trees my motherboard failed, and I've been using sub standard hardware since, which has significantly slowed development.  Frequent freezing caused by low memory, or slow hard drives, made work slow and frustrating. I still need to do some work on the hard drives, but I was finally able to get that motherboard replaced, and should be in a much better position to make steady progress.

I started this post some time ago, but never released it for one reason or another.  I wanted to explain what I have been doing, since there was a big gap of silence after the release of Productive Game- Trees 0.013.

After I finished 0.013 of the Tree Timer, I started moving in different directions and then eventually burned out.  First I started working on improving the Options UI, so that the UI objects scale correctly and it would be easier to add more in the future.  Due to an issue with the task icon code that I thought I had fixed,  I ended up losing that work.

I was planning on coming back to it, but decided to do something completely different instead.  I started working on Productive Game 3 - Text Adventure.  With PG3 - Text Adventure, you use the points you gain from your daily activities to advance in a text adventure.  In its finished state, users should be able to create their own text adventures, and share them with others.  Basically,  I modified the Yarn Spinner code so that I would be able to determine which text nodes had been visited.  I then added a really rudimentary productivity system where you basically just press a button to add a point, and then when you visit an unvisited node, it would take a point away.  I could also add yarn stories by simply dropping them into a folder, and then when the program started, it would automatically add the story.  Your progress is always saved and you can also switch between stories.

I was planning on releasing that prototype, but I felt like it needed a better productivity system.  However, I learned a lot of things creating the first two Productive Game prototypes, so I decided to take what I learned and make something better.

I decided to start working on what I called the "Productive Game Core".  I wanted to make a Productivity System that I could use as a solid foundation in order to jump start my progress on any future Productive Games.  I wanted PGC to be a modular system that I could build once, and then propagate the updates to all of my Productive Game Prototypes, and any potential fully realized Productive Games in the future.

I also wanted to be able to keep track of work time.  I have sometimes used the Toggl application in order to keep track of work time, so I thought I would see if I could interface with the Toggl API.  I created a successful login application.  Feeling confident that it was possible, and that I roughly knew how to interface with the Toggl API, I then moved on to working on the Productive Game Core.  I streamed some of my work with the Toggl API, but I finished offline.

I wanted to build the Productive Game Core correctly, from the beginning.  One thing I've never done right, is the way that I stored information on the hard drive.  I've mostly been using Unity PlayerPrefs, with or without PlayerPrefsX, but if I was going to store work time information, I needed to potentially store a lot of data, and I needed a robust system in order to do that.  I was able to make some simple storage tests using FileStream, and was able to transfer my own simple data in Productive Game 2 - Trees, to a different computer.  But that's not a very robust system, and I couldn't find a good answer on what kind of system I needed to use.  I researched using SQLite, but it seemed intimidating and with my lack of confidence, that it truly was the best system to use, I didn't pursue it at that time.  I streamed some of my work on Productive Game Core.

I also wanted a Calendar system to be able to visualize progress.  The most basic system will simply show whether or not the program had been used that day.  I wanted to be able to display a whole month, or a whole year.  The year layout might look something like this.  I created a rudimentary implementation that worked perfectly with the data I had, but I needed to clean it up and create better user interface elements for it.  I'm not entirely sure how I want it to work, or where I want to put the button in Productive Game 2 - Trees.  I could wait and add it to Productive Game Core and leave it out of Trees, but who knows when I'll finish Core.  I still need to decide where and how I want to use it.  I streamed some of working on the Calendar.

I also tested out billboard sprites in the tree scene, to see how they would look compared to the fixed row I had previously.  I had been playing Doom and Doom II, and that compelled me to try it. Initially I had decided not to use billboard sprites, because I liked the orchard like appearance of the fixed, straight rows, but after trying it I decided that it did look better.  In the future, I plan to add an option that people can toggle to switch between them.  I streamed working on it, but I think I finished off-stream. 

So, in short,  I started working on revamping the Options UI in PG 2, and then lost the progress.  I then created a prototype for PG3, but decided that I needed to do more work on it before release.  In order to be able to release new prototypes quicker, I decided to a create a unified Productivity System, calling it Productive Game Core.  For PGC I created a successful login test for the Toggl API, with the intention of using it to keep track of work time, in the future.  I created a rudimentary calendar system test that I could either add to PG2, or wait and add it to PGC, but it still needs a better looking User Interface.  I created a test to export and import data from PG2, but it needs some cleanup before I can release it.  And I got completely lost trying to decide how I wanted to store data on the disk for PGC.

After I did all this, I noticed the bug in version 0.013 of PG2, so I created a "fix" and released version 0.14, with the billboard sprites feature.  This was documented in the last post.

I have now begun work on trying to get a working SQLite implementation for Productive Game Core.  I'm still in an early stage, but I'm making progress.  I don't yet know if SQLite is the best method for handling my data in Productive Game Core, but I'm going to try to take it to its logical conclusion so that I may know with certainty.

Friday, August 2, 2019

Version 0.14 of ProductiveGame 2 - Trees released.


Removed the minimize to system tray functionality because it caused conflicts with the Unity Game Engine.
Changed the 2.5d tree sprites to billboard sprites
Dropped and extraneous zero from version numbering.

I noticed a bug in version 0.013, where the cpu would increase significantly when program was minimized to system tray, or "hidden".  Apparently the Unity Engine doesn't like being hidden, and cpu usage increases significantly, and there is also an error that is continuously output to a file.  I found a log file that was 19gb!  Every time the program loads, it deletes the old log file and creates a new on, so there should be no need to try to track down and delete the log file manually.

I believe my only option was to remove the minimize to system tray functionality, so I changed it to a regular minimize.  Now the minimize buttons and exit buttons do the same thing.  I did this so that someone (like me, for example), won't click the exit button thinking it will minimize when it actually closes the program.  In the future, I'll add an option to change that functionality.

In addition, I changed the tree sprites to "billboard sprites", so that they are always facing the player.  This is similar to the way sprites work in 2.5d games like Doom, Wolfenstein 3d, Duke Nukem 3d, etc.

I also dropped an extraneous zero from version numbering.