On monday I picked up a really nice virus from my Deli-Krew-Mate Vicky- i think its a subset of flu because it has acheing limbs and temperatures. I keep sweating the damn temperatures down but then they come back. Oh well, means I got time to sit home reading up on random crap instead of going off to work.
After quite a bit of (legit for once) drugs I do feel better and can manage some coding [smile].
Anyway, I'm gonna stop complaining.
I was looking at a few other blogs and reading through their engine woes and stuff. It got me thinking how I was actually approaching such a complex project as a 3D engine. I wondering if anyone else followed this idea with their engine (if this is their first engine):
I don't look at the engine as a whole- ofcourse I have an idea of what I want out of it in the end and the features I need. However since this is my first engine I don't know how to do every feature. So instead of overloading my brain and thinking 'shit, how am I going to code all this' and panic and then lose interest I am taking each section as it comes. For instance, first I wanted to load up levels but what type of level? a 3D level. What type have alot of documentation and a loader/renderer already in place to base ones code on? BSP- its quite simple to load the initial level but collision detection can be a real pain in the arse. Luckily there is code in place and I can go back to collision detection and properly understand it when I need to.
This tool also taught me fonts and how to display different kinds of fonts on the screen and how to make a font code base.
So now I have my level and loader/renderer sorted out- thats now my 'world view' tool. A complete program in itself. What next? Well, I wanted to get the mesh code sorted out so I went to look through one of my Game Programmers books and found MD2 code for meshes- its good because theres documentation and I can update it to MD3. So I made a seperate tool called 'Model View' that loaded MD2 meshes (havn't upgraded it yet). This app also used the font code base from the 'World View' tool to display information.
So I had a mesh view tool, a world view tool, what next? I felt I needed more control over the engines environment (change system variables, load meshes and BSP levels etc.). What better way to control the engine from inside the engine than a developers console. So I made some graphics for it and decided what the initial commands would be for the console. I came up with an input method and a logic system for the console that allowed full control over the environment. So now I had a fully working, independent, class based code base for a console that I then incorporated into my other tools to display debug information, dump error messages and allow me to contol the world.
So now I wanted to make a fully working GUI to easily display information and edit information. Once I got a basic window system with a button widget and label widget to display and work as it was meant to in the 'World View' app (since thats the main basis for the rendering of levels) I wanted to make it more powerful. I wanted to be able to control windows in an external resource to import into the engine since engines are meant to be totally modular by their very nature. So I created a file type that had a template on loading in information for the window to display so the engine could just query the resource instead of having it hard coded. This had many benefits including not having to recompile the engine everytime I wanted to change a window and also allowed for the next stage.
Now I had made the initial primitive GUI system work on a modular resource engine I decided to make the creation of windows easier. So the next natural step would be to make a GUI editor which is where I'm at at the moment (see my pervious post). I can edit windows with my GUI editor and have my World View tool import them when needed.
I'm sorry it was a bit long winded; I got a little carried away. What I am thinking is, is my method the same as most of you out there on their first engine. I take each section of the engine, make it into a little program and in that way I am making it into a whole learning experience. Before I started, I had no idea how to display fonts, make GUI etc. but because I'm taking every aspect of the engine, no matter how small, as one little code base and one little application I am breaking it down and making it easier to learn and code. I am not looking beyond the current section of the engine since it is a project unto itself. However, once I finish a code base I incorporate it into all the other tools of my engine so I know they all work together without problems.
This way i'm not in a panic that I have so much to learn.
Just to lighten the heaviness of this entry...heres a manga hitlar (created by the Face Transformer and Rob Loach's hand picked image of Teh Hitlar Himself)
For example instead of having one big blob like "World View" I would devide that into many smaller blobs. So wold veiw would then become: TextureManager (a tool that would take care of loading textures and unloading them), Gemoetry (loading the gemoetry of the BSP or whatever), etc.