diff options
author | Teravus Ovares | 2008-03-10 05:56:58 +0000 |
---|---|---|
committer | Teravus Ovares | 2008-03-10 05:56:58 +0000 |
commit | d0123a796b0066a50914c6fae5d86550dcf58636 (patch) | |
tree | 5e7a5091afffc219c96c7649c4b2535215faf8e5 /OpenSim/Region | |
parent | * Added ODEPlugin Support for llSetBuoyancy. Set Buoyancy to 1 for space prim. (diff) | |
download | opensim-SC-d0123a796b0066a50914c6fae5d86550dcf58636.zip opensim-SC-d0123a796b0066a50914c6fae5d86550dcf58636.tar.gz opensim-SC-d0123a796b0066a50914c6fae5d86550dcf58636.tar.bz2 opensim-SC-d0123a796b0066a50914c6fae5d86550dcf58636.tar.xz |
ODEPlugin
* Added osSetPrimFloatOnWater(BOOL) to make Physical prim float at the water level.
* osSetPrimFloatOnWater(TRUE); or osSetPrimFloatOnWater(FALSE);
* By default, prim do not float at the water level.
* More work is needed on the floating, but it's a start.
Diffstat (limited to '')
11 files changed, 111 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index a8f08ec..6ed63be 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs | |||
@@ -942,6 +942,22 @@ namespace OpenSim.Region.Environment.Scenes | |||
942 | } | 942 | } |
943 | } | 943 | } |
944 | 944 | ||
945 | public void SetFloatOnWater(int floatYN) | ||
946 | { | ||
947 | if (PhysActor != null) | ||
948 | { | ||
949 | if (floatYN == 1) | ||
950 | { | ||
951 | PhysActor.FloatOnWater = true; | ||
952 | } | ||
953 | else | ||
954 | { | ||
955 | PhysActor.FloatOnWater = false; | ||
956 | } | ||
957 | |||
958 | } | ||
959 | } | ||
960 | |||
945 | public LLVector3 GetSitTargetPositionLL() | 961 | public LLVector3 GetSitTargetPositionLL() |
946 | { | 962 | { |
947 | return new LLVector3(m_sitTargetPosition.x, m_sitTargetPosition.y, m_sitTargetPosition.z); | 963 | return new LLVector3(m_sitTargetPosition.x, m_sitTargetPosition.y, m_sitTargetPosition.z); |
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs index 2b4bbc4..429894d 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs | |||
@@ -254,6 +254,11 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin | |||
254 | set { return; } | 254 | set { return; } |
255 | } | 255 | } |
256 | 256 | ||
257 | public override bool FloatOnWater | ||
258 | { | ||
259 | set { return; } | ||
260 | } | ||
261 | |||
257 | public override bool IsPhysical | 262 | public override bool IsPhysical |
258 | { | 263 | { |
259 | get { return false; } | 264 | get { return false; } |
diff --git a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs index feb9ca1..80cc086 100644 --- a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs +++ b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs | |||
@@ -930,6 +930,11 @@ namespace OpenSim.Region.Physics.BulletXPlugin | |||
930 | set { return; } | 930 | set { return; } |
931 | } | 931 | } |
932 | 932 | ||
933 | public override bool FloatOnWater | ||
934 | { | ||
935 | set { return; } | ||
936 | } | ||
937 | |||
933 | public virtual void SetAcceleration(PhysicsVector accel) | 938 | public virtual void SetAcceleration(PhysicsVector accel) |
934 | { | 939 | { |
935 | lock (BulletXScene.BulletXLock) | 940 | lock (BulletXScene.BulletXLock) |
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs index 82b7450..2a35d43 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs | |||
@@ -204,6 +204,8 @@ namespace OpenSim.Region.Physics.Manager | |||
204 | public abstract bool CollidingGround { get; set; } | 204 | public abstract bool CollidingGround { get; set; } |
205 | public abstract bool CollidingObj { get; set; } | 205 | public abstract bool CollidingObj { get; set; } |
206 | 206 | ||
207 | public abstract bool FloatOnWater { set; } | ||
208 | |||
207 | public abstract PhysicsVector RotationalVelocity { get; set; } | 209 | public abstract PhysicsVector RotationalVelocity { get; set; } |
208 | 210 | ||
209 | public abstract bool Kinematic { get; set; } | 211 | public abstract bool Kinematic { get; set; } |
@@ -256,6 +258,12 @@ namespace OpenSim.Region.Physics.Manager | |||
256 | set { return; } | 258 | set { return; } |
257 | } | 259 | } |
258 | 260 | ||
261 | public override bool FloatOnWater | ||
262 | { | ||
263 | set { return; } | ||
264 | } | ||
265 | |||
266 | |||
259 | public override bool CollidingGround | 267 | public override bool CollidingGround |
260 | { | 268 | { |
261 | get { return false; } | 269 | get { return false; } |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 7047ec1..9bbbb22 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | |||
@@ -185,6 +185,11 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
185 | set { m_buoyancy = value; } | 185 | set { m_buoyancy = value; } |
186 | } | 186 | } |
187 | 187 | ||
188 | public override bool FloatOnWater | ||
189 | { | ||
190 | set { return; } | ||
191 | } | ||
192 | |||
188 | public override bool IsPhysical | 193 | public override bool IsPhysical |
189 | { | 194 | { |
190 | get { return false; } | 195 | get { return false; } |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 5291cbf..7cdc558 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | |||
@@ -73,6 +73,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
73 | public bool m_disabled = false; | 73 | public bool m_disabled = false; |
74 | public bool m_taintadd = false; | 74 | public bool m_taintadd = false; |
75 | public bool m_taintselected = false; | 75 | public bool m_taintselected = false; |
76 | public bool m_taintCollidesWater = false; | ||
76 | 77 | ||
77 | 78 | ||
78 | public uint m_localID = 0; | 79 | public uint m_localID = 0; |
@@ -739,6 +740,11 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
739 | 740 | ||
740 | if (m_taintparent != _parent) | 741 | if (m_taintparent != _parent) |
741 | changelink(timestep); | 742 | changelink(timestep); |
743 | |||
744 | if (m_taintCollidesWater != m_collidesWater) | ||
745 | changefloatonwater(timestep); | ||
746 | |||
747 | |||
742 | } | 748 | } |
743 | else | 749 | else |
744 | { | 750 | { |
@@ -1333,6 +1339,24 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1333 | m_taintsize = _size; | 1339 | m_taintsize = _size; |
1334 | } | 1340 | } |
1335 | 1341 | ||
1342 | public void changefloatonwater(float timestep) | ||
1343 | { | ||
1344 | m_collidesWater = m_taintCollidesWater; | ||
1345 | |||
1346 | if (prim_geom != (IntPtr)0) | ||
1347 | { | ||
1348 | if (m_collidesWater) | ||
1349 | { | ||
1350 | m_collisionFlags |= CollisionCategories.Water; | ||
1351 | } | ||
1352 | else | ||
1353 | { | ||
1354 | m_collisionFlags &= ~CollisionCategories.Water; | ||
1355 | } | ||
1356 | d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); | ||
1357 | } | ||
1358 | } | ||
1359 | |||
1336 | public void changeshape(float timestamp) | 1360 | public void changeshape(float timestamp) |
1337 | { | 1361 | { |
1338 | 1362 | ||
@@ -1895,6 +1919,14 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1895 | } | 1919 | } |
1896 | } | 1920 | } |
1897 | 1921 | ||
1922 | public override bool FloatOnWater | ||
1923 | { | ||
1924 | set { | ||
1925 | m_taintCollidesWater = value; | ||
1926 | _parent_scene.AddPhysicsActorTaint(this); | ||
1927 | } | ||
1928 | } | ||
1929 | |||
1898 | public override void SetMomentum(PhysicsVector momentum) | 1930 | public override void SetMomentum(PhysicsVector momentum) |
1899 | { | 1931 | { |
1900 | } | 1932 | } |
diff --git a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs index dd2c0dd..d6c8202 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs | |||
@@ -383,6 +383,11 @@ namespace OpenSim.Region.Physics.POSPlugin | |||
383 | set { return; } | 383 | set { return; } |
384 | } | 384 | } |
385 | 385 | ||
386 | public override bool FloatOnWater | ||
387 | { | ||
388 | set { return; } | ||
389 | } | ||
390 | |||
386 | public override bool IsPhysical | 391 | public override bool IsPhysical |
387 | { | 392 | { |
388 | get { return false; } | 393 | get { return false; } |
@@ -622,6 +627,11 @@ namespace OpenSim.Region.Physics.POSPlugin | |||
622 | set { return; } | 627 | set { return; } |
623 | } | 628 | } |
624 | 629 | ||
630 | public override bool FloatOnWater | ||
631 | { | ||
632 | set { return; } | ||
633 | } | ||
634 | |||
625 | public override PhysicsVector Velocity | 635 | public override PhysicsVector Velocity |
626 | { | 636 | { |
627 | get { return _velocity; } | 637 | get { return _velocity; } |
diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs index b03da31..910b2d2 100644 --- a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs | |||
@@ -253,6 +253,11 @@ namespace OpenSim.Region.Physics.PhysXPlugin | |||
253 | set { return; } | 253 | set { return; } |
254 | } | 254 | } |
255 | 255 | ||
256 | public override bool FloatOnWater | ||
257 | { | ||
258 | set { return; } | ||
259 | } | ||
260 | |||
256 | public override bool IsPhysical | 261 | public override bool IsPhysical |
257 | { | 262 | { |
258 | get { return false; } | 263 | get { return false; } |
@@ -484,6 +489,11 @@ namespace OpenSim.Region.Physics.PhysXPlugin | |||
484 | set { return; } | 489 | set { return; } |
485 | } | 490 | } |
486 | 491 | ||
492 | public override bool FloatOnWater | ||
493 | { | ||
494 | set { return; } | ||
495 | } | ||
496 | |||
487 | public override bool ThrottleUpdates | 497 | public override bool ThrottleUpdates |
488 | { | 498 | { |
489 | get { return false; } | 499 | get { return false; } |
diff --git a/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs b/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs index 79a106b..05a1a1d 100644 --- a/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs +++ b/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs | |||
@@ -1897,6 +1897,11 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
1897 | m_LSL_Functions.osSetParcelMediaURL(url); | 1897 | m_LSL_Functions.osSetParcelMediaURL(url); |
1898 | } | 1898 | } |
1899 | 1899 | ||
1900 | public void osSetPrimFloatOnWater(int floatYN) | ||
1901 | { | ||
1902 | m_LSL_Functions.osSetPrimFloatOnWater(floatYN); | ||
1903 | } | ||
1904 | |||
1900 | public double llList2Float(LSL_Types.list src, int index) | 1905 | public double llList2Float(LSL_Types.list src, int index) |
1901 | { | 1906 | { |
1902 | return m_LSL_Functions.llList2Float(src, index); | 1907 | return m_LSL_Functions.llList2Float(src, index); |
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index 010961e..623ac29 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs | |||
@@ -1508,6 +1508,8 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
1508 | } | 1508 | } |
1509 | } | 1509 | } |
1510 | 1510 | ||
1511 | |||
1512 | |||
1511 | public void llSetHoverHeight(double height, int water, double tau) | 1513 | public void llSetHoverHeight(double height, int water, double tau) |
1512 | { | 1514 | { |
1513 | m_host.AddScriptLPS(1); | 1515 | m_host.AddScriptLPS(1); |
@@ -4405,6 +4407,18 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
4405 | return false; | 4407 | return false; |
4406 | } | 4408 | } |
4407 | 4409 | ||
4410 | public void osSetPrimFloatOnWater(int floatYN) | ||
4411 | { | ||
4412 | m_host.AddScriptLPS(1); | ||
4413 | if (m_host.ParentGroup != null) | ||
4414 | { | ||
4415 | if (m_host.ParentGroup.RootPart != null) | ||
4416 | { | ||
4417 | m_host.ParentGroup.RootPart.SetFloatOnWater(floatYN); | ||
4418 | } | ||
4419 | } | ||
4420 | } | ||
4421 | |||
4408 | private void NotImplemented(string command) | 4422 | private void NotImplemented(string command) |
4409 | { | 4423 | { |
4410 | m_host.AddScriptLPS(1); | 4424 | m_host.AddScriptLPS(1); |
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs index d60d70e..381ca62 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs | |||
@@ -648,6 +648,7 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
648 | void osRegionNotice(string msg); | 648 | void osRegionNotice(string msg); |
649 | bool osConsoleCommand(string Command); | 649 | bool osConsoleCommand(string Command); |
650 | void osSetParcelMediaURL(string url); | 650 | void osSetParcelMediaURL(string url); |
651 | void osSetPrimFloatOnWater(int floatYN); | ||
651 | 652 | ||
652 | } | 653 | } |
653 | } | 654 | } |