Unfortunately, most of this progress has been behind-the-scenes stuff, so I don't really have any more to show for it than I did before - at least as far as pretty pictures go.
However, just to give you an idea of how vastly improved my code base is, here is a comparison of the asset instantiation and loading code (for only a single object), both before and after the asset system:
BEFORE:
// Here is just the initialization and loading for the Character object //CImage* CharUp1 = NULL;CImage* CharUp2 = NULL;CImage* CharUp3 = NULL;CImage* CharUp4 = NULL;CImage* CharDown1 = NULL;CImage* CharDown2 = NULL;CImage* CharDown3 = NULL;CImage* CharDown4 = NULL;CImage* CharLeft1 = NULL;CImage* CharLeft2 = NULL;CImage* CharLeft3 = NULL;CImage* CharLeft4 = NULL;CImage* CharRight1 = NULL;CImage* CharRight2 = NULL;CImage* CharRight3 = NULL;CImage* CharRight4 = NULL;CSprite* CUpSprite = NULL;CSprite* CDnSprite = NULL;CSprite* CLfSprite = NULL;CSprite* CRiSprite = NULL;CObject* ChrObj = NULL;CharUp1 = new CBitmap( "./Data/Images/Character/CharUp1.bmp" );CharUp2 = new CBitmap( "./Data/Images/Character/CharUp2.bmp" );CharUp3 = new CBitmap( "./Data/Images/Character/CharUp3.bmp" );CharUp4 = new CBitmap( "./Data/Images/Character/CharUp4.bmp" );CharDown1 = new CBitmap( "./Data/Images/Character/CharDown1.bmp" );CharDown2 = new CBitmap( "./Data/Images/Character/CharDown2.bmp" );CharDown3 = new CBitmap( "./Data/Images/Character/CharDown3.bmp" );CharDown4 = new CBitmap( "./Data/Images/Character/CharDown4.bmp" );CharLeft1 = new CBitmap( "./Data/Images/Character/CharLeft1.bmp" );CharLeft2 = new CBitmap( "./Data/Images/Character/CharLeft2.bmp" );CharLeft3 = new CBitmap( "./Data/Images/Character/CharLeft3.bmp" );CharLeft4 = new CBitmap( "./Data/Images/Character/CharLeft4.bmp" );CharRight1 = new CBitmap( "./Data/Images/Character/CharRight1.bmp" );CharRight2 = new CBitmap( "./Data/Images/Character/CharRight2.bmp" );CharRight3 = new CBitmap( "./Data/Images/Character/CharRight3.bmp" );CharRight4 = new CBitmap( "./Data/Images/Character/CharRight4.bmp" );CUpSprite = new CSprite( 0.175f );CUpSprite->AddFrame( CharUp1 );CUpSprite->AddFrame( CharUp2 );CUpSprite->AddFrame( CharUp3 );CUpSprite->AddFrame( CharUp4 );CDnSprite = new CSprite( 0.175f );CDnSprite->AddFrame( CharDown1 );CDnSprite->AddFrame( CharDown2 );CDnSprite->AddFrame( CharDown3 );CDnSprite->AddFrame( CharDown4 );CLfSprite = new CSprite( 0.175f );CLfSprite->AddFrame( CharLeft1 );CLfSprite->AddFrame( CharLeft2 );CLfSprite->AddFrame( CharLeft3 );CLfSprite->AddFrame( CharLeft4 );CRiSprite = new CSprite( 0.175f );CRiSprite->AddFrame( CharRight1 );CRiSprite->AddFrame( CharRight2 );CRiSprite->AddFrame( CharRight3 );CRiSprite->AddFrame( CharRight4 );ChrObj = new CObject( 400, 300, 0 );ChrObj->AddSprite( CUpSprite, "CHAR_UP" );ChrObj->AddSprite( CDnSprite, "CHAR_DOWN" );ChrObj->AddSprite( CLfSprite, "CHAR_LEFT" );ChrObj->AddSprite( CRiSprite, "CHAR_RIGHT" );ChrObj->AddSprite( CDnSprite, "CHAR_DEFAULT", 0 );// And here is the cleanup in the WndProc, which is the reason all// of this fragmentation was necessary in the first place.if( CharUp1 ) delete CharUp1;if( CharUp2 ) delete CharUp2;if( CharUp3 ) delete CharUp3;if( CharUp4 ) delete CharUp4;if( CharDown1 ) delete CharDown1;if( CharDown2 ) delete CharDown2;if( CharDown3 ) delete CharDown3;if( CharDown4 ) delete CharDown4;if( CharLeft1 ) delete CharLeft1;if( CharLeft2 ) delete CharLeft2;if( CharLeft3 ) delete CharLeft3;if( CharLeft4 ) delete CharLeft4;if( CharRight1 ) delete CharRight1;if( CharRight2 ) delete CharRight2;if( CharRight3 ) delete CharRight3;if( CharRight4 ) delete CharRight4;if( CUpSprite ) delete CUpSprite;if( CDnSprite ) delete CDnSprite;if( CLfSprite ) delete CLfSprite;if( CRiSprite ) delete CRiSprite;if( ChrObj ) delete ChrObj;
AFTER:
AssetSystem.SelectObject ( "CHARACTER" ); AssetSystem.SetPosition ( 368.0f, 268.0f, 20.0f ); AssetSystem.SelectGroup ( "IDLE" ); AssetSystem.SetFrameDelay( 0.2f ); AssetSystem.AddImage ( "./Data/Images/Character/CharDown1.bmp", 200 ); AssetSystem.AddImage ( "./Data/Images/Character/CharDown2.bmp", 175 ); AssetSystem.AddImage ( "./Data/Images/Character/CharDown3.bmp", 150 ); AssetSystem.AddImage ( "./Data/Images/Character/CharDown4.bmp", 175 ); AssetSystem.SelectGroup ( "UP" ); AssetSystem.SetFrameDelay( 0.2f ); AssetSystem.AddImage ( "./Data/Images/Character/CharUp1.bmp", 200 ); AssetSystem.AddImage ( "./Data/Images/Character/CharUp2.bmp", 175 ); AssetSystem.AddImage ( "./Data/Images/Character/CharUp3.bmp", 150 ); AssetSystem.AddImage ( "./Data/Images/Character/CharUp4.bmp", 175 ); AssetSystem.SelectGroup ( "DOWN" ); AssetSystem.SetFrameDelay( 0.2f ); AssetSystem.AddImage ( "./Data/Images/Character/CharDown1.bmp", 200 ); AssetSystem.AddImage ( "./Data/Images/Character/CharDown2.bmp", 175 ); AssetSystem.AddImage ( "./Data/Images/Character/CharDown3.bmp", 150 ); AssetSystem.AddImage ( "./Data/Images/Character/CharDown4.bmp", 175 ); AssetSystem.SelectGroup ( "LEFT" ); AssetSystem.SetFrameDelay( 0.2f ); AssetSystem.AddImage ( "./Data/Images/Character/CharLeft1.bmp", 200 ); AssetSystem.AddImage ( "./Data/Images/Character/CharLeft2.bmp", 175 ); AssetSystem.AddImage ( "./Data/Images/Character/CharLeft3.bmp", 150 ); AssetSystem.AddImage ( "./Data/Images/Character/CharLeft4.bmp", 175 ); AssetSystem.SelectGroup ( "RIGHT" ); AssetSystem.SetFrameDelay( 0.2f ); AssetSystem.AddImage ( "./Data/Images/Character/CharRight1.bmp", 200 ); AssetSystem.AddImage ( "./Data/Images/Character/CharRight2.bmp", 175 ); AssetSystem.AddImage ( "./Data/Images/Character/CharRight3.bmp", 150 ); AssetSystem.AddImage ( "./Data/Images/Character/CharRight4.bmp", 175 );
As you can see, the second sample, though still somewhat lengthy, is MUCH better than the first. Keep in mind that this is only for a single object - there's no telling how many objects will need to be loaded for a real scene. The initial approach would be impossible to use for anything larger than four or five objects.
On a similar note, creating the graphics system forced me to rearrange some functions, and the decrease in function calls actually improved my framerate by a small margin. A nice bonus indeed.
So the engine is far more manageable now, and I am putting the finishing touches on the graphics system as we speak. Or as I type, rather.
Next up are the physics and input systems.