aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
diff options
context:
space:
mode:
authorUbitUmarov2012-03-14 18:24:04 +0000
committerUbitUmarov2012-03-14 18:24:04 +0000
commitcf9ebd301c32fa7cd991e78647ce011b0aefc796 (patch)
tree3d29095b6ac2d6f50caeff2eab303dc1faaf4f9a /OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
parentMerge branch 'master' into careminster (diff)
downloadopensim-SC_OLD-cf9ebd301c32fa7cd991e78647ce011b0aefc796.zip
opensim-SC_OLD-cf9ebd301c32fa7cd991e78647ce011b0aefc796.tar.gz
opensim-SC_OLD-cf9ebd301c32fa7cd991e78647ce011b0aefc796.tar.bz2
opensim-SC_OLD-cf9ebd301c32fa7cd991e78647ce011b0aefc796.tar.xz
bug fixs, added a default physics shape estimator based on being a mesh or not and use it on unlink if new root part as type none. Viewer doesn't get updated even with fullupdates we are missing something still
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs84
1 files changed, 71 insertions, 13 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index a68b3eb..84ed40c 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -986,7 +986,11 @@ namespace OpenSim.Region.Framework.Scenes
986 public PrimitiveBaseShape Shape 986 public PrimitiveBaseShape Shape
987 { 987 {
988 get { return m_shape; } 988 get { return m_shape; }
989 set { m_shape = value;} 989 set
990 {
991 m_shape = value;
992 m_physicsShapeType = DefaultPhysicsShapeType();
993 }
990 } 994 }
991 995
992 /// <summary> 996 /// <summary>
@@ -1377,31 +1381,68 @@ namespace OpenSim.Region.Framework.Scenes
1377 { 1381 {
1378 if (value >= 0 && value <= (byte)SOPMaterialData.MaxMaterial) 1382 if (value >= 0 && value <= (byte)SOPMaterialData.MaxMaterial)
1379 { 1383 {
1380 m_material = (Material)value; 1384 bool update = false;
1381 m_friction = SOPMaterialData.friction(m_material); 1385
1382 m_bounce = SOPMaterialData.bounce(m_material); 1386 if (m_material != (Material)value)
1383 if (PhysActor != null) 1387 {
1388 update = true;
1389 m_material = (Material)value;
1390 }
1391
1392 if (m_friction != SOPMaterialData.friction(m_material))
1393 {
1394 update = true;
1395 m_friction = SOPMaterialData.friction(m_material);
1396 }
1397
1398 if (m_bounce != SOPMaterialData.bounce(m_material))
1384 { 1399 {
1385 PhysActor.SetMaterial((int)value); 1400 update = true;
1401 m_bounce = SOPMaterialData.bounce(m_material);
1402 }
1403
1404 if (update)
1405 {
1406 if (PhysActor != null)
1407 {
1408 PhysActor.SetMaterial((int)value);
1409 }
1410 if(ParentGroup != null)
1411 ParentGroup.HasGroupChanged = true;
1412 ScheduleFullUpdateIfNone();
1386 } 1413 }
1387 } 1414 }
1388 } 1415 }
1389 } 1416 }
1390 1417
1418 // not a propriety to move to methods place later
1419 public byte DefaultPhysicsShapeType()
1420 {
1421 byte type;
1422
1423 if (Shape != null && (Shape.SculptType == (byte)SculptType.Mesh))
1424 type = (byte)PhysShapeType.convex;
1425 else
1426 type = (byte)PhysShapeType.prim;
1427
1428 return type;
1429 }
1430
1391 public byte PhysicsShapeType 1431 public byte PhysicsShapeType
1392 { 1432 {
1393 get { return m_physicsShapeType; } 1433 get { return m_physicsShapeType; }
1394 set 1434 set
1395 { 1435 {
1396 if (value < 0 || value >= (byte)PhysShapeType.convex) 1436 if (value >= 0 && value <= (byte)PhysShapeType.convex)
1397 value = (byte)PhysShapeType.prim; //convex not supported ?
1398
1399 else if (value == (byte)PhysShapeType.none)
1400 { 1437 {
1401 if (ParentGroup == null || ParentGroup.RootPart == this) 1438 if (value == (byte)PhysShapeType.none && ParentGroup != null && ParentGroup.RootPart == this)
1402 value = (byte)PhysShapeType.prim; 1439 m_physicsShapeType = DefaultPhysicsShapeType();
1440 else
1441 m_physicsShapeType = value;
1442 ScheduleFullUpdateIfNone();
1403 } 1443 }
1404 m_physicsShapeType = value; 1444 else
1445 m_physicsShapeType = DefaultPhysicsShapeType();
1405 } 1446 }
1406 } 1447 }
1407 1448
@@ -1413,6 +1454,7 @@ namespace OpenSim.Region.Framework.Scenes
1413 if (value >=1 && value <= 22587.0) 1454 if (value >=1 && value <= 22587.0)
1414 { 1455 {
1415 m_density = value; 1456 m_density = value;
1457 ScheduleFullUpdateIfNone();
1416 } 1458 }
1417 } 1459 }
1418 } 1460 }
@@ -1423,6 +1465,7 @@ namespace OpenSim.Region.Framework.Scenes
1423 set 1465 set
1424 { if( value >= -1 && value <=28.0f) 1466 { if( value >= -1 && value <=28.0f)
1425 m_gravitymod = value; 1467 m_gravitymod = value;
1468 ScheduleFullUpdateIfNone();
1426 } 1469 }
1427 } 1470 }
1428 1471
@@ -1434,6 +1477,7 @@ namespace OpenSim.Region.Framework.Scenes
1434 if (value >= 0 && value <= 255.0f) 1477 if (value >= 0 && value <= 255.0f)
1435 { 1478 {
1436 m_friction = value; 1479 m_friction = value;
1480 ScheduleFullUpdateIfNone();
1437 } 1481 }
1438 } 1482 }
1439 } 1483 }
@@ -1446,6 +1490,7 @@ namespace OpenSim.Region.Framework.Scenes
1446 if (value >= 0 && value <= 1.0f) 1490 if (value >= 0 && value <= 1.0f)
1447 { 1491 {
1448 m_bounce = value; 1492 m_bounce = value;
1493 ScheduleFullUpdateIfNone();
1449 } 1494 }
1450 } 1495 }
1451 } 1496 }
@@ -2942,6 +2987,19 @@ namespace OpenSim.Region.Framework.Scenes
2942 APIDTarget = Quaternion.Identity; 2987 APIDTarget = Quaternion.Identity;
2943 } 2988 }
2944 2989
2990
2991
2992 public void ScheduleFullUpdateIfNone()
2993 {
2994 if (ParentGroup == null)
2995 return;
2996
2997// ??? ParentGroup.HasGroupChanged = true;
2998
2999 if (UpdateFlag != UpdateRequired.FULL)
3000 ScheduleFullUpdate();
3001 }
3002
2945 /// <summary> 3003 /// <summary>
2946 /// Schedules this prim for a full update 3004 /// Schedules this prim for a full update
2947 /// </summary> 3005 /// </summary>