Monday, February 12, 2007

i just can't do it...

Code without resharper and visual assist that is...

After 10 minutes of my first Xna tutorial, I decided my first task would be to do all my developing in team edition.

Being my own customer, I made up the following criteria:
1. I can create a new c# library in vs team edition that contains a Game class which can be debugged/run from vs team edition
2. No post build copying of project output
3. No need for maintaining 2 separate solutions for each game
4. No dependencies between my game projects

In order to fulfill these, I created a new Xna solution called GameShell. I deleted the Game class, leaving Program.cs which I filled in with this code:
static void Main(string[] args)
{
string assemblyFilename = args[0];
string path = args[1];

Environment.CurrentDirectory = path;
Assembly assembly = Assembly.LoadFile(Path.Combine(path, assemblyFilename));
string typeName = args[2];
Game game = (Game)assembly.CreateInstance(typeName);
game.Run();
}

I used Assembly.LoadFile, because using Type.GetType(gameTypeName) was returning null... I don't think anything was spelled wrong, but I was feeling lazy, so I used the code above...

Its sad to admit, but before I thought to set Environment.CurrentDirectory, I had created a new appdomain that was rooted in the other directory and had a lovely class, GameStarter : MarshalByRef, that created and ran the game, which I thought was very clever, but completely unnecessary)


Now that I had GameShell to execute my game, I needed a game to run. I created a c# library in Team Edition, added references to Microsoft.Xna.Framework and Microsoft.Xna.Game and then added a game class to the project. Actually its Game1 from the first tutorial from the documentation (very exciting). Now that the project was ready to debug/run, I went into the project properties and changed the Debug settings so that it ran GameShell.exe with the proper command line arguments (AgileSolutions.GameLib.dll, FullPathToDebugDirectory, AgileSolutions.GameLib.Game1)

Viola! The game ran and I can now write any game library with my favorite tools and run it without any headaches... one minor issue though, graphics... you know, not the most important part of the video game, right?

For this first project, I cheated and put my graphics in the GameShell assembly, a big no no, but I'm gonna do some reading and learn more about content pipeline assets and we'll see what happens. Any ideas?

No comments: