Writing good software is a difficult job. There are also thousand of books and methods out there to tell you how to improve your development process to make your software better. It’s a lifetime job to read them all. There are also very simple solutions to check whether you are on the right track to do it right. One surprisingly simple method is the Joel Test
Ask yourself the following questions and for every yes you get one point. If you have less than ten points in the end you have a problem…
- Do you use source control?
- Can you make a build in one step?
- Do you make daily builds?
- Do you have a bug database?
- Do you fix bugs before writing new code?
- Do you have an up-to-date schedule?
- Do you have a spec?
- Do programmers have quiet working conditions?
- Do you use the best tools money can buy?
- Do you have testers?
- Do new candidates write code during their interview?
- Do you do hallway usability testing?
While working with Ogre3D and reading the news on their page I found a project called NeoAxis. A game engine using Ogre for graphic rendering written in C#. The screenshots are promising and the feature list contains everything I need. Physics, graphics, input control and last but not least support for multiple platforms.
I have downloaded the NeoAxis SDK and started a bit to work with it. The demos in the SDK are great. All features are shown in one big game. In this game is a long corridor with many doors. You can walk thru in first person view and enter door by door. Behind every door one feature is shown. The source code for the demos can be found in the SDK, too, to see how it works. For some genres there are finished templates available. For example first and third persons games. You only have to find the right demo and change the code for your needs. The wiki contains documentation of the basic structure of NeoAxis and refers to the right demo source code. The main development platform for NeoAxis is MS Visual Studio but there is an deployment tool which builds and prepares packages for different platforms.
After some programming with NeoAxis and a good impression I also found some problems which made this sdk not the first choose for me. Here are some of the reasons I stopped working with it. The deployment tool delivers windows and mac binaries. For Linux is the advised solution to take wine. Ok, that will work but is not really a good solution because the user has to do a lot of work to get the software running. Due to visual studio is the development platform it was a bit unconvenient to reboot every time I would like to develop with NeoAxis. A virtual machine was not enough because of heavy use of shaders in the graphic engine. The result was 3fps instead of 250fps during the demos. The style the documentation is written make it hard to start. Everything is in the demo code and you search the parts you need. An answer how to develop and deploy more than one application with a single installation I have never found. Except to install the sdk multiple times…
NeoAxis is worth a look for you if you search for a C# based game engine. The graphic is nice and there are already existing templates to modify. Perhaps I did not find the right documentation to get a good access to it. And last if you develop on windows than many problems I have had you probably will not have.
Again… So many things happened and no blog entry about it.
During the work with the Ogre3D SDK at my never ending project I have had a lot of fun with old problems. Ogre is great but it is a pure graphic engine written in C++ and it lacks many features you will need sooner or later when writing a bigger application (some people call it games).
Games does not only consists of graphic effects You will also need a GUI, network support, user input, data storage, multithreading and so on. No big deal while developing for one platform but to get it running on several platforms it becomes a real time consuming problem. You have two choices. Writing code several times for different platforms by yourself or using many different C++ libraries. With both ways you need a working tool chain to build that application on all your platforms. In the end you spend much time to find the reason because of the applications runs on platform A but not B. Thats what I did the most of my time so far….
So far I am using for network and multithreading boost. For compiling cmake. And for GUI CEGUI. The performance is great but this way is very hard to go and the code far away from what I would call nice and readable.
At work I am programming in Java. The lecture I give is in CSharp. And at home I am programming C++. Because of all the smaller and bigger problems with good old C++ and the lack of spare time I am searching for a better solution. But that will be another story…
Sometimes it is a good idea to have a look around you even if everything works fine. So far I was used to Ant for building my java applications. Ant is a great tool and like gnu make it is able to do everything you want it to do. You only have to write a proper configuration file…
Maven is on the first look a bit more restrictive because it forces you to follow some conventions given by the chosen type of a project. But if you follow this way you will get much simpler configuration and well structured layout of project files. The project type specific stuff is handled by plugins and there are plenty of plugins already out there for nearly every task you could imagine. Due to the fact that you can write your own plugin maven is less restrictive as it seems in the beginning. And for all standard use cases I was really satisfied with the already existing plugins.
Maven is written in java itself and therefore available on every platform java is running. The existing plugins can be retrieved from internet repositories. Even depending jar files you need to build or deploy your project are retrieved automatically. Perfect to build on different machines without the need of installing the jar dependencies on every build machine or blow up your source revision system. Just add it to maven configuration and if something is missing it will be retrieved.
The eager Ant is not dead. It has now a new companion.