From d0123a796b0066a50914c6fae5d86550dcf58636 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Mon, 10 Mar 2008 05:56:58 +0000 Subject: 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. --- OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 5 ++++ OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 32 ++++++++++++++++++++++++ 2 files changed, 37 insertions(+) (limited to 'OpenSim/Region/Physics/OdePlugin') 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 set { m_buoyancy = value; } } + public override bool FloatOnWater + { + set { return; } + } + public override bool IsPhysical { 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 public bool m_disabled = false; public bool m_taintadd = false; public bool m_taintselected = false; + public bool m_taintCollidesWater = false; public uint m_localID = 0; @@ -739,6 +740,11 @@ namespace OpenSim.Region.Physics.OdePlugin if (m_taintparent != _parent) changelink(timestep); + + if (m_taintCollidesWater != m_collidesWater) + changefloatonwater(timestep); + + } else { @@ -1333,6 +1339,24 @@ namespace OpenSim.Region.Physics.OdePlugin m_taintsize = _size; } + public void changefloatonwater(float timestep) + { + m_collidesWater = m_taintCollidesWater; + + if (prim_geom != (IntPtr)0) + { + if (m_collidesWater) + { + m_collisionFlags |= CollisionCategories.Water; + } + else + { + m_collisionFlags &= ~CollisionCategories.Water; + } + d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); + } + } + public void changeshape(float timestamp) { @@ -1895,6 +1919,14 @@ namespace OpenSim.Region.Physics.OdePlugin } } + public override bool FloatOnWater + { + set { + m_taintCollidesWater = value; + _parent_scene.AddPhysicsActorTaint(this); + } + } + public override void SetMomentum(PhysicsVector momentum) { } -- cgit v1.1