Feedback after use in project

Topics: User Forum
Dec 15, 2006 at 5:09 PM
Hi Jeff,
After using your engine for WildBoarders I figured you'd like some feedback on the engine use in a complete game :).

First off, great engine! You are doing the community such a huge favor that I don't even think some grasp the implications from having a solid, working physics engine ready to go right when they install XNA and so early in XNA's life too! Thank you for all your effort.

Some of the stuff I really like about the engine:

1. The API was very easy to use and get up and running. Simplifying it to creating a rigid body and saying new physicsSimulator() makes physics look easy :P.

2. The engine layout is very readable and easy to change. I had to add a collision event system for the game and adding it in was just a matter of finding where the collisions happen :). I'll be posting my edits this weekend hopefully.

3. When I first used it (in alpha) it was surprisingly stable. Now with 1.0 it runs very well and made the game much more enjoyable with the bounce fix now in :).

Suggestions for improvement:

1. Maybe adding comments on top of the properties could help with usability with beginners just trying to tinker with your engine. For example, a quick blurb above 'bias' about how it effects the engine would help the intellisense-users.

2. A direct CollisionPrecisionFactor I personally perferred and changed the constructors to. I was colliding really large terrain against a tiny player and having the precision a function of the terrain size made the player sometimes 'fall' through it. Setting it uniformly fixed this issue with no relevant performance hit.

3. Didn't see a physicsSimulator.Dispose(), or even better, a .Reset().

4. To remove the counter-clockwise oriented requirement you could automatically orient the vertices on construction. I had to implement this in my editor and could happily post the code if you wish.

5. A solution for highspeed collisions. A minor gripe, but something I'll even probably think on myself since I'd like to continue to use this library.

6. Turning collisions on/off for individual objects. This could be achieved by removing it from the simulator, but seems like it be a bit messy to pass the simulator around to every game object to remove itself.

Great engine, and I can't wait for future improvements :).

- Alex
Dec 15, 2006 at 8:07 PM
I just want to 2nd Alex's comments, GREAT WORK! Physics and collisions are easily some of the most difficult aspects of a game, and you make it plug and play! The community thanks you!


oh yea, great work on wildboards too! Very nice!
Dec 15, 2006 at 8:58 PM
Thanks Alex.

I will print this out and put it on my desk so I remember to adddress it.

Some feedback on the feedback:

1.) I agree, and I have gone as far as getting a tool (based on sandcastle) setup for autogenerating help docs from code comments. I just need to take the time to add the comments...

2.)I think I did already change this. What I originally had was just placeholder code. I'm pretty sure the api now supports setting the collsion precision factor in the constructor. You can even bypass the collision precision factor all together and set the grid precision directly... but this has to be done outside the constructor.

3. If physicsSimulator doesn't have a dispose, I will add it. Must have missed it. What do you forsee "Reset" doing?

4. Yes, please post the code.

5. This is definelty on my short list. I've read how to do it if using SAT for collision, but I haven't found any info on how to do it when using distance grids. I've had some ideas, but nothing concrete yet.

Anyway, thanks again for the feedback. And thanks for the plug during the opening credits of your game!

I look forward to playing the new version.

Also, thanks Gudy for the positive comments.

Dec 17, 2006 at 6:33 AM

3) I ended up implementing a RemoveAll() so I could clear the simulator out between levels. I guess that'd be a Reset()? It just saved on creating a new simulator and copying over the properties.

4)Here's the code I edited to add in automatic orientation:
It made sense for me to put it there, but you might have a better spot. VerticesCCW() is basically all you need. I just edited SetVertices to carry it out. There's another method of finding the minimum point and doing a couple cross-products. Both methods have O(n) time and I don't remember the specifics of the other one :P.

Catcha Later