Farseer Physics Engine 3.0 Update (December)

It is time for another update. First I will answer everyones question: No, we are not dead :)

The Box2DX port is coming along fine. It is hard to keep up with the updates made to the Box2D tree, so we have been a little behind. Our port is now updated to revision 31 (The newest) and I'm currently working on finding the errors I made during the update.
(There are always some...)

I have a list of stuff that has been ported over. This also gives you an idea of what Box2D includes feature wise.

1. (De)Activation of bodies

Bodies can now be deactivated and thus will not be included in the collision process. We have had this in Farseer Physics since the beginning. Now that we have it in Box2DX is just another plus.

2. Explicit body types

A body can be of 3 types: Static, kinematic and dynamic. Static bodies can't move, dynamic can. Kinematic bodies are a little special and I will write more about it when it as some point in the future.

3. More uniform API

A lot of properties have been added to joints, bodies and shapes. The naming of them have also been changed to be more consistent. When I begin developing Farseer Physics Engine 3.0, we will probably change a lot of this to be even simpler. But it is always
a plus that Box2D changed the API to be easier beforehand.

4. A LOT of bug fixes.

About 40 bugfixes made it into the newest revisions. They fixes some problems like infinite loops in the new broadphase and raycasting.

5. New joints

WeldJoint and FrictionJoint was added into revision 31. More about those later.

6. New samples

New samples to demonstrate WeldJoint, FrictionJoint, Body activation and a lot more. 2 samples were added in total - old ones were changed to show off the new functionality.

I hope to find the last bugs before new years eve, but I can't promise anything.

I checked in a large batch of bugfixes last night. The samples should be stable now and the engine itself should work. There are still a small amount bugs in the engine; one related to creating fixtures that I can't seem to find. I will take another look
at it later today.

As most of you know, I've been taking up the task of updating Box2DX to Box2D 2.1. It worked fine and I've fixed a lot of porting related bugs lately. - Then I noticed another C# and XNA based port from Brandon Furtwangler and Nathan Furtwangler was getting
attention on the Box2D forums, so I decided to see what they came up with. After a deep code inspection I noticed that Box2DX and Box2D.XNA are 99% identical (really... line by line). The difference lies in that Box2D.XNA optimized their build using static
sized generic arrays (tuples actually) and structs. I tested the performance of the two builds and Box2D.XNA was 2ms faster on my computer.

That made me choose Box2D.XNA over Box2DX. Not only is it more optimized, but it also removes the burden of porting Box2D to Box2DX from me. I started focusing on the work of creating Farseer Physics Engine 3.0. So far I've created the foundation and uploaded
a working build.

I will work on FPE 3.0 features from now on and hopefully get an alpha version of FPE 3.0 out soon.

It is new years eve in 21 hours here. Going to give the coding a rest for tonight and see what I can squeeze in tomorrow. I might jump into the new year with my laptop in my hand while coding on FPE 3.0. ;)

Matthew is lending me a much needed hand and he has started working on some nice looking samples. He has also created a video of a performance test that I think is pretty awesome. You can see it here:
http://www.youtube.com/watch?v=JVYVdaJ9WkQ

I've been working hard on refactoring the engine to make the API clean and more consistent. I've also improved the performance of the engine so that it allocates less memory than when we started. This is good news for Xbox360 users since that is Xbox360's
nemesis. It should run much faster on the Xbox platform than earlier version of Farseer Physics.

Next thing we do is to implement all the tools from FPE 2.x and hopefully improve on them while we do it. I will post more updates soon.

Right now the code is pretty hard to upgrade to. It uses the Box2D classes and names (Body, shape, fixture) and that is a very flexible setup. However, I would like something simpler as we have in FPE 2.x. (Body, geometry) without removing the flexible part.
I believe Matthew implemented the old factories in the new code, so if you are using the factories, it should be a lot easier to upgrade to 3.0.

The tools will be split up into different namespaces and their name will change. We kept the collision delegates and I will try to implement the same API in World (3.0) as we have in PhysicsSimulator (2.x).

I'm not sure how backwards compatible the 3.0 version will be, but I will try to use 2.x as a guide when creating the API. I'm not much for API garbage (Old method calls to new methods), so don't expect too much.