Latest NINJA physics patch against upstream OpenSim r7872
1. Copyright statements have been added to the new files.
2. The throttle in OdePrim has been re-instated. Additionally, rotational motion is now taken into account when deciding if throttling should be applied or not; rotational motion exceeding an epsilon threshold causes an update. This allows for instance rotating fan blades to properly update even when no translational motion is present. This change is in effect even when NINJA physics is off, because I think in general rotational motion should always be considered when deciding whether to throttle or not.
3. The patch no longer modifies code in SceneGraph (though a few comments relating to joints are added).
4. The OpenSim.ini setting for NINJA physics joints has been moved to the [ODEPhysicsSettings] section. The OpenSim.ini option is only directly queried by OdePlugin. The SceneObjectPart queries the abstract PhysicsScene to ask if it supports the NINJA-style joint naming convention; if so, properly-named prims, when turned physical, cause joint requests to be passed to the abstract PhysicsScene.
5. The patch is now limited to the assemblies mentioned: OpenSim.Region.Scenes.SceneObjectPart, OpenSim.Region.Physics.Manager, OpenSim.Region.Physics.OdePlugin, and Scene.
In addition, the following improvements have been made.
a. Codepaths for the new joints code are not executed unless NINJA physics is turned on in OpenSim.ini. Therefore, this patch should cause no noticeable effects when NINJA physics is turned off. Specifically, if NINJA physics is turned off, then the following code paths become inactive.
Inactive code paths in Scene.cs:
* Codepath for adding joint callbacks to the PhysicsScene is not executed. Therefore joint callbacks are not called.
* Codepath for deleting joints along with a SceneObject (DeleteSceneObject) is not executed because IsJoint() returns false.
Inactive code paths in SceneObjectPart.cs:
* IsJoint() always returns false.
* Codepaths for issuing joint creation/deletion requests are not executed since IsJoint() always false.
* New code path: there is code to update PhysActor.SOPName and PhysActor.SOPDescription fields.
Inactive code paths in OdePlugin.cs
* Joint creation and deletion routines are not called because the SceneObjectPart refuses to recognize joints.
* Codepath for removal of joints is not executed in RemovePrimThreadLocked.
* Codepath for handling incoming joint creation/deletion requests is not executed.
* Codepath for checking/creating pending joints is not executed.
* Codepath for invoking joint callbacks is not executed.
b. Error display has been greatly improved. In case a joint (or joints) cannot be created for some reason, the error is indicated in-world with an icon drawn directly on top of the corresponding joint object(s). This error display uses the same error reporting mechanism used by script error messages. This makes it very easy to identify any joints with errors and fix them (e.g. by correcting mistyped part names). No joint-related output goes into the logfile.