diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 84 |
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> |