diff options
author | UbitUmarov | 2013-05-29 06:32:26 +0100 |
---|---|---|
committer | UbitUmarov | 2013-05-29 06:32:26 +0100 |
commit | 269febc87e1aba24fff09e9fb0d77eee0a73b185 (patch) | |
tree | 196cd7cab7dbd301c3deda7ff605776ed14ae059 /OpenSim/Region/Physics | |
parent | make sure friction slip parameters are zero ( or other value ) and not (diff) | |
download | opensim-SC_OLD-269febc87e1aba24fff09e9fb0d77eee0a73b185.zip opensim-SC_OLD-269febc87e1aba24fff09e9fb0d77eee0a73b185.tar.gz opensim-SC_OLD-269febc87e1aba24fff09e9fb0d77eee0a73b185.tar.bz2 opensim-SC_OLD-269febc87e1aba24fff09e9fb0d77eee0a73b185.tar.xz |
let gravity modifier, friction, restitution and density changes be applied
to prim. Only have efect on root prim. Density doesn't get effect
imediatly, only on next change of size or shape. density change
implies a full body rebuild to be done later, after reducing the number
of sets sop does. Other parameters should work. **** mainly untested ***
Diffstat (limited to 'OpenSim/Region/Physics')
-rw-r--r-- | OpenSim/Region/Physics/UbitOdePlugin/ODEDynamics.cs | 19 | ||||
-rw-r--r-- | OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs | 52 |
2 files changed, 65 insertions, 6 deletions
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEDynamics.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEDynamics.cs index a7dda7a..3c952ae 100644 --- a/OpenSim/Region/Physics/UbitOdePlugin/ODEDynamics.cs +++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEDynamics.cs | |||
@@ -137,6 +137,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
137 | float m_amdampY; | 137 | float m_amdampY; |
138 | float m_amdampZ; | 138 | float m_amdampZ; |
139 | 139 | ||
140 | float m_gravmod; | ||
140 | 141 | ||
141 | public float FrictionFactor | 142 | public float FrictionFactor |
142 | { | 143 | { |
@@ -146,6 +147,14 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
146 | } | 147 | } |
147 | } | 148 | } |
148 | 149 | ||
150 | public float GravMod | ||
151 | { | ||
152 | set | ||
153 | { | ||
154 | m_gravmod = value; | ||
155 | } | ||
156 | } | ||
157 | |||
149 | 158 | ||
150 | public ODEDynamics(OdePrim rootp) | 159 | public ODEDynamics(OdePrim rootp) |
151 | { | 160 | { |
@@ -153,6 +162,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
153 | _pParentScene = rootPrim._parent_scene; | 162 | _pParentScene = rootPrim._parent_scene; |
154 | m_timestep = _pParentScene.ODE_STEPSIZE; | 163 | m_timestep = _pParentScene.ODE_STEPSIZE; |
155 | m_invtimestep = 1.0f / m_timestep; | 164 | m_invtimestep = 1.0f / m_timestep; |
165 | m_gravmod = rootPrim.GravModifier; | ||
156 | } | 166 | } |
157 | 167 | ||
158 | public void DoSetVehicle(VehicleData vd) | 168 | public void DoSetVehicle(VehicleData vd) |
@@ -816,7 +826,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
816 | m_lmEfect = 0; | 826 | m_lmEfect = 0; |
817 | m_ffactor = 1f; | 827 | m_ffactor = 1f; |
818 | } | 828 | } |
819 | 829 | ||
820 | // hover | 830 | // hover |
821 | if (m_VhoverTimescale < 300 && rootPrim.prim_geom != IntPtr.Zero) | 831 | if (m_VhoverTimescale < 300 && rootPrim.prim_geom != IntPtr.Zero) |
822 | { | 832 | { |
@@ -862,7 +872,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
862 | force.Z += perr; | 872 | force.Z += perr; |
863 | ldampZ *= -curVel.Z; | 873 | ldampZ *= -curVel.Z; |
864 | 874 | ||
865 | force.Z += _pParentScene.gravityz * (1f - m_VehicleBuoyancy); | 875 | force.Z += _pParentScene.gravityz * m_gravmod * (1f - m_VehicleBuoyancy); |
866 | } | 876 | } |
867 | else // no buoyancy | 877 | else // no buoyancy |
868 | force.Z += _pParentScene.gravityz; | 878 | force.Z += _pParentScene.gravityz; |
@@ -870,7 +880,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
870 | else | 880 | else |
871 | { | 881 | { |
872 | // default gravity and Buoyancy | 882 | // default gravity and Buoyancy |
873 | force.Z += _pParentScene.gravityz * (1f - m_VehicleBuoyancy); | 883 | force.Z += _pParentScene.gravityz * m_gravmod * (1f - m_VehicleBuoyancy); |
874 | } | 884 | } |
875 | 885 | ||
876 | // linear deflection | 886 | // linear deflection |
@@ -1063,8 +1073,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1063 | torque.Y -= curLocalAngVel.Y * m_amdampY; | 1073 | torque.Y -= curLocalAngVel.Y * m_amdampY; |
1064 | torque.Z -= curLocalAngVel.Z * m_amdampZ; | 1074 | torque.Z -= curLocalAngVel.Z * m_amdampZ; |
1065 | } | 1075 | } |
1066 | 1076 | ||
1067 | |||
1068 | 1077 | ||
1069 | if (force.X != 0 || force.Y != 0 || force.Z != 0) | 1078 | if (force.X != 0 || force.Y != 0 || force.Z != 0) |
1070 | { | 1079 | { |
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs index 7cabddd..e3f88c6 100644 --- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs | |||
@@ -115,6 +115,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
115 | 115 | ||
116 | private int body_autodisable_frames; | 116 | private int body_autodisable_frames; |
117 | public int bodydisablecontrol; | 117 | public int bodydisablecontrol; |
118 | private float m_gravmod = 1.0f; | ||
118 | 119 | ||
119 | 120 | ||
120 | // Default we're a Geometry | 121 | // Default we're a Geometry |
@@ -914,6 +915,55 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
914 | bounce = _parent_scene.m_materialContactsData[pMaterial].bounce; | 915 | bounce = _parent_scene.m_materialContactsData[pMaterial].bounce; |
915 | } | 916 | } |
916 | 917 | ||
918 | public override float Density | ||
919 | { | ||
920 | get | ||
921 | { | ||
922 | return m_density * 100f; | ||
923 | } | ||
924 | set | ||
925 | { | ||
926 | m_density = value / 100f; | ||
927 | // for not prim mass is not updated since this implies full rebuild of body inertia TODO | ||
928 | } | ||
929 | } | ||
930 | public override float GravModifier | ||
931 | { | ||
932 | get | ||
933 | { | ||
934 | return m_gravmod; | ||
935 | } | ||
936 | set | ||
937 | { | ||
938 | m_gravmod = value; | ||
939 | if (m_vehicle != null) | ||
940 | m_vehicle.GravMod = m_gravmod; | ||
941 | } | ||
942 | } | ||
943 | public override float Friction | ||
944 | { | ||
945 | get | ||
946 | { | ||
947 | return mu; | ||
948 | } | ||
949 | set | ||
950 | { | ||
951 | mu = value; | ||
952 | } | ||
953 | } | ||
954 | |||
955 | public override float Restitution | ||
956 | { | ||
957 | get | ||
958 | { | ||
959 | return bounce; | ||
960 | } | ||
961 | set | ||
962 | { | ||
963 | bounce = value; | ||
964 | } | ||
965 | } | ||
966 | |||
917 | public void setPrimForRemoval() | 967 | public void setPrimForRemoval() |
918 | { | 968 | { |
919 | AddChange(changes.Remove, null); | 969 | AddChange(changes.Remove, null); |
@@ -3336,7 +3386,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
3336 | } | 3386 | } |
3337 | else | 3387 | else |
3338 | { | 3388 | { |
3339 | float b = (1.0f - m_buoyancy); | 3389 | float b = (1.0f - m_buoyancy) * m_gravmod; |
3340 | fx = _parent_scene.gravityx * b; | 3390 | fx = _parent_scene.gravityx * b; |
3341 | fy = _parent_scene.gravityy * b; | 3391 | fy = _parent_scene.gravityy * b; |
3342 | fz = _parent_scene.gravityz * b; | 3392 | fz = _parent_scene.gravityz * b; |