Well this is less of a progress update on Black Engine and more of some mindless ramblings and thoughts.
Since I presented Black Engine at the end of my Independent Study it has grown by over 3,000 lines of code. So what is diffident you might ask? Nothing. At least thats what the casual observer would see. It still looks exactly the same.
Under the hood though there have been a TON of changes. From the asynchronous logger to the configuration class to the centralized texture manager. Even smaller things like a much tighter and cleaner build environment and finally a working Linux build target, the kinetic resource system was greatly improved in concept and design. More recently outward appearances have finally started to change with the GUI classes coming along. These are fairly close to completion too.
But I just read something I’ve been mulling over. “Perfect is the enemy of good”. I’ve been wondering if I have been guilty of this. Obviously very little work has gotten done this month, but I have been researching the dark corners of C++ learning the language more and more intimately. And tonight when I began coding I started applying that knowledge. Going through the class hierarchy altering every class with explicit constructors and removing their default constructor I never wanted in the first place.
See, sure this is better, and in fact this is what I had wanted from the beginning but hadn’t known about the explicit key word. And my code is now cleaner and tighter. But what if I had spent that time finishing the last of the GUI classes. What if all the time and love I’ve put into pre-existing code since the tech demo was spent on new code. Would I have my next public release done already? Probably, but who knows. Really at heart I am a perfectionist. And I try to practice a strongly iterative development approach so I actually get project finished. But I ALWAYS find my self going back and tweaking every little thing, these projects become my babies, my works of art. So maybe perfect is the enemy of good, maybe it does kill many promising projects. But I need to find a way to use my perfectionist tendencies to create exceptional projects that still actually get finished. Because, whether I like it or not. I am a perfectionist.
So. so. tired.
Trying to code but making just really stupid mistakes.
So I’m stopping for the night. But I did get quite a bit done.
The WindowManagerService used to just store and Manage Windows. Now, to provide more flexibility, The WindowManagerService is basically a wrapper that stored and manages WindowManagers. Then, WindowManagers store windows. So a lot of functionality was moved to the WindowManager and a lot was added to the WindowManagerService. The end result is very similar to what it was with a few small exceptions syntactically when creating windows. But what you get is more flexibility.
Windows and Window Managers can now be displayed and hidden which was the whole goal. Next up is layout managers, then buttons and labels.
So slowly getting there. Hopefully next time I will be a bit more with it.
Oh on a side note, I’ve been meaning to post about this for a while. I did my first big test of my new asynchronous logging class. Logging about 10 things per potential collier during a collision detection research test. Usually about 20 – 50 colliders per-frame, so thats between 200 and 500 write operations per-frame. The result! No noticeable frame drop! Ya, made me pretty happy 🙂 I’m beginning to use the new message levels too, but I think I’m going to make some minor modifications to that at some point.
Wow… that was not fun. at all.
I implemented the refactoring of the Resource base classes I talked about in the last .plan file.
It was a TOTAL bitch, affected many many files. But I took the opportunity to clean up some other code and add in Doxygen comments to most of the files I touched.
So there were a TON of tweaks along with the changes and additions I implemented. It all compiles and runs now. The scene graph is empty so it doesn’t display anything, but thats intended.
I have to implement the new camera system before I can get the 3D components rendering again. That sounds like more then it is, it’s really a pretty small change which will make a lot of things nicer.
I had about a month of changes that were not committed to the SVN which made me uncomfortable. So I committed all of the months changes even though it doesn’t “run” persay.
Any way, with that huge task out of the way, I can get back to finishing the windowing API.
Once the windowing API is done, I have to tweak a few things and then I will do a public release!
Ok! I have a real treat for you to night! I worked out the bugs in the code I did last nite and got my windowing API rendering!
Now keep in mind the window looks like crap because I didn’t spend any time on the textures it uses, that’s it. It could look like anything you want. So with out further adu, here it is.
It may not look like too much but I assure you it’s a very robust API with a high level manager that makes window creation and management very easy 🙂
So whats next? I’m glad you asked!
1. Being able to hide windows
2. Multiple window managers
3. Window Themes
4. Window Layouts ( think Java style window layout managers, but simpler for now )
5. Window content ( Buttons, text labels for now )
And thats it for now for the API, once that is all done I will move on to implementing the new camera system, and then like I’ve said 100 times now, tweak a few things and get a release out!
Btw, totally off topic, just saw “Groundhog Day”, What a freaking awesome movie!
That is all.