diff options
author | Robert Adams | 2014-12-31 12:43:26 -0800 |
---|---|---|
committer | Robert Adams | 2014-12-31 12:43:26 -0800 |
commit | 291c7cdbcc80dc270418a4959ccfa0ed8cc0c190 (patch) | |
tree | 869b0fb89d246ac3a3adb9782ff8c9e2b8279d4f /OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs | |
parent | Fixed declaration switcharoo on the region combiner dll. (diff) | |
download | opensim-SC-291c7cdbcc80dc270418a4959ccfa0ed8cc0c190.zip opensim-SC-291c7cdbcc80dc270418a4959ccfa0ed8cc0c190.tar.gz opensim-SC-291c7cdbcc80dc270418a4959ccfa0ed8cc0c190.tar.bz2 opensim-SC-291c7cdbcc80dc270418a4959ccfa0ed8cc0c190.tar.xz |
BulletSim: Add axis locking enabled through the ExtendedPhysics module.
Allows locking of prim/linkset relative moving in each of the linear
and angular axis. Limits on movement or rotation can be set.
Diffstat (limited to '')
-rwxr-xr-x | OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs | 98 |
1 files changed, 70 insertions, 28 deletions
diff --git a/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs b/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs index 9daf9d7..ff4afbf 100755 --- a/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs +++ b/OpenSim/Region/OptionalModules/Scripting/ExtendedPhysics/ExtendedPhysics.cs | |||
@@ -66,6 +66,7 @@ public class ExtendedPhysics : INonSharedRegionModule | |||
66 | public const string PhysFunctChangeLinkType = "BulletSim.ChangeLinkType"; | 66 | public const string PhysFunctChangeLinkType = "BulletSim.ChangeLinkType"; |
67 | public const string PhysFunctGetLinkType = "BulletSim.GetLinkType"; | 67 | public const string PhysFunctGetLinkType = "BulletSim.GetLinkType"; |
68 | public const string PhysFunctChangeLinkParams = "BulletSim.ChangeLinkParams"; | 68 | public const string PhysFunctChangeLinkParams = "BulletSim.ChangeLinkParams"; |
69 | public const string PhysFunctAxisLockLimits = "BulletSim.AxisLockLimits"; | ||
69 | 70 | ||
70 | // ============================================================= | 71 | // ============================================================= |
71 | 72 | ||
@@ -176,6 +177,71 @@ public class ExtendedPhysics : INonSharedRegionModule | |||
176 | return ret; | 177 | return ret; |
177 | } | 178 | } |
178 | 179 | ||
180 | // Code for specifying params. | ||
181 | // The choice if 14700 is arbitrary and only serves to catch parameter code misuse. | ||
182 | [ScriptConstant] | ||
183 | public const int PHYS_AXIS_LOCK_LINEAR = 14700; | ||
184 | [ScriptConstant] | ||
185 | public const int PHYS_AXIS_LOCK_LINEAR_X = 14701; | ||
186 | [ScriptConstant] | ||
187 | public const int PHYS_AXIS_LIMIT_LINEAR_X = 14702; | ||
188 | [ScriptConstant] | ||
189 | public const int PHYS_AXIS_LOCK_LINEAR_Y = 14703; | ||
190 | [ScriptConstant] | ||
191 | public const int PHYS_AXIS_LIMIT_LINEAR_Y = 14704; | ||
192 | [ScriptConstant] | ||
193 | public const int PHYS_AXIS_LOCK_LINEAR_Z = 14705; | ||
194 | [ScriptConstant] | ||
195 | public const int PHYS_AXIS_LIMIT_LINEAR_Z = 14706; | ||
196 | [ScriptConstant] | ||
197 | public const int PHYS_AXIS_LOCK_ANGULAR = 14707; | ||
198 | [ScriptConstant] | ||
199 | public const int PHYS_AXIS_LOCK_ANGULAR_X = 14708; | ||
200 | [ScriptConstant] | ||
201 | public const int PHYS_AXIS_LIMIT_ANGULAR_X = 14709; | ||
202 | [ScriptConstant] | ||
203 | public const int PHYS_AXIS_LOCK_ANGULAR_Y = 14710; | ||
204 | [ScriptConstant] | ||
205 | public const int PHYS_AXIS_LIMIT_ANGULAR_Y = 14711; | ||
206 | [ScriptConstant] | ||
207 | public const int PHYS_AXIS_LOCK_ANGULAR_Z = 14712; | ||
208 | [ScriptConstant] | ||
209 | public const int PHYS_AXIS_LIMIT_ANGULAR_Z = 14713; | ||
210 | [ScriptConstant] | ||
211 | public const int PHYS_AXIS_UNLOCK_LINEAR = 14714; | ||
212 | [ScriptConstant] | ||
213 | public const int PHYS_AXIS_UNLOCK_LINEAR_X = 14715; | ||
214 | [ScriptConstant] | ||
215 | public const int PHYS_AXIS_UNLOCK_LINEAR_Y = 14716; | ||
216 | [ScriptConstant] | ||
217 | public const int PHYS_AXIS_UNLOCK_LINEAR_Z = 14717; | ||
218 | [ScriptConstant] | ||
219 | public const int PHYS_AXIS_UNLOCK_ANGULAR = 14718; | ||
220 | [ScriptConstant] | ||
221 | public const int PHYS_AXIS_UNLOCK_ANGULAR_X = 14719; | ||
222 | [ScriptConstant] | ||
223 | public const int PHYS_AXIS_UNLOCK_ANGULAR_Y = 14720; | ||
224 | [ScriptConstant] | ||
225 | public const int PHYS_AXIS_UNLOCK_ANGULAR_Z = 14721; | ||
226 | [ScriptConstant] | ||
227 | public const int PHYS_AXIS_UNLOCK = 14722; | ||
228 | // physAxisLockLimits() | ||
229 | [ScriptInvocation] | ||
230 | public int physAxisLock(UUID hostID, UUID scriptID, object[] parms) | ||
231 | { | ||
232 | int ret = -1; | ||
233 | if (!Enabled) return ret; | ||
234 | |||
235 | PhysicsActor rootPhysActor; | ||
236 | if (GetRootPhysActor(hostID, out rootPhysActor)) | ||
237 | { | ||
238 | object[] parms2 = AddToBeginningOfArray(rootPhysActor, null, parms); | ||
239 | ret = MakeIntError(rootPhysActor.Extension(PhysFunctAxisLockLimits, parms2)); | ||
240 | } | ||
241 | |||
242 | return ret; | ||
243 | } | ||
244 | |||
179 | [ScriptConstant] | 245 | [ScriptConstant] |
180 | public const int PHYS_LINKSET_TYPE_CONSTRAINT = 0; | 246 | public const int PHYS_LINKSET_TYPE_CONSTRAINT = 0; |
181 | [ScriptConstant] | 247 | [ScriptConstant] |
@@ -187,7 +253,6 @@ public class ExtendedPhysics : INonSharedRegionModule | |||
187 | public int physSetLinksetType(UUID hostID, UUID scriptID, int linksetType) | 253 | public int physSetLinksetType(UUID hostID, UUID scriptID, int linksetType) |
188 | { | 254 | { |
189 | int ret = -1; | 255 | int ret = -1; |
190 | |||
191 | if (!Enabled) return ret; | 256 | if (!Enabled) return ret; |
192 | 257 | ||
193 | // The part that is requesting the change. | 258 | // The part that is requesting the change. |
@@ -259,34 +324,11 @@ public class ExtendedPhysics : INonSharedRegionModule | |||
259 | int ret = -1; | 324 | int ret = -1; |
260 | if (!Enabled) return ret; | 325 | if (!Enabled) return ret; |
261 | 326 | ||
262 | // The part that is requesting the change. | 327 | PhysicsActor rootPhysActor; |
263 | SceneObjectPart requestingPart = BaseScene.GetSceneObjectPart(hostID); | 328 | if (GetRootPhysActor(hostID, out rootPhysActor)) |
264 | |||
265 | if (requestingPart != null) | ||
266 | { | 329 | { |
267 | // The type is is always on the root of a linkset. | 330 | object[] parms2 = { rootPhysActor, null }; |
268 | SceneObjectGroup containingGroup = requestingPart.ParentGroup; | 331 | ret = MakeIntError(rootPhysActor.Extension(PhysFunctGetLinksetType, parms2)); |
269 | SceneObjectPart rootPart = containingGroup.RootPart; | ||
270 | |||
271 | if (rootPart != null) | ||
272 | { | ||
273 | PhysicsActor rootPhysActor = rootPart.PhysActor; | ||
274 | if (rootPhysActor != null) | ||
275 | { | ||
276 | object[] parms2 = { rootPhysActor, null }; | ||
277 | ret = MakeIntError(rootPhysActor.Extension(PhysFunctGetLinksetType, parms2)); | ||
278 | } | ||
279 | else | ||
280 | { | ||
281 | m_log.WarnFormat("{0} physGetLinksetType: root part does not have a physics actor. rootName={1}, hostID={2}", | ||
282 | LogHeader, rootPart.Name, hostID); | ||
283 | } | ||
284 | } | ||
285 | else | ||
286 | { | ||
287 | m_log.WarnFormat("{0} physGetLinksetType: root part does not exist. RequestingPartName={1}, hostID={2}", | ||
288 | LogHeader, requestingPart.Name, hostID); | ||
289 | } | ||
290 | } | 332 | } |
291 | else | 333 | else |
292 | { | 334 | { |