aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorMelanie2012-03-13 22:20:12 +0100
committerMelanie2012-03-13 22:20:12 +0100
commit838818270785c58d7b2df221b8b94397aa3cdb04 (patch)
treeb695fe9a94e8b1c170c1bb97b6b3873a671e3efa /OpenSim
parentHook up the new cap to the SOP changes (diff)
downloadopensim-SC-838818270785c58d7b2df221b8b94397aa3cdb04.zip
opensim-SC-838818270785c58d7b2df221b8b94397aa3cdb04.tar.gz
opensim-SC-838818270785c58d7b2df221b8b94397aa3cdb04.tar.bz2
opensim-SC-838818270785c58d7b2df221b8b94397aa3cdb04.tar.xz
Implement llSetPrimitiveParams for physics shape and material. Add
llSetPhysicsMaterial support.
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs60
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs1
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs11
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs5
4 files changed, 77 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 958527a..fd4c7ad 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -7632,6 +7632,36 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7632 } 7632 }
7633 } 7633 }
7634 7634
7635 private void SetPhysicsMaterial(SceneObjectPart part, int material_bits,
7636 float material_density, float material_friction,
7637 float material_restitution, float material_gravity_modifier)
7638 {
7639 ExtraPhysicsData physdata = new ExtraPhysicsData();
7640 physdata.PhysShapeType = (PhysShapeType)part.PhysicsShapeType;
7641 physdata.Density = part.Density;
7642 physdata.Friction = part.Friction;
7643 physdata.Bounce = part.Bounciness;
7644 physdata.GravitationModifier = part.GravityModifier;
7645
7646 if ((material_bits & (int)ScriptBaseClass.DENSITY) != 0)
7647 physdata.Density = material_density;
7648 if ((material_bits & (int)ScriptBaseClass.FRICTION) != 0)
7649 physdata.Friction = material_friction;
7650 if ((material_bits & (int)ScriptBaseClass.RESTITUTION) != 0)
7651 physdata.Bounce = material_restitution;
7652 if ((material_bits & (int)ScriptBaseClass.GRAVITY_MULTIPLIER) != 0)
7653 physdata.GravitationModifier = material_gravity_modifier;
7654
7655 part.UpdateExtraPhysics(physdata);
7656 }
7657
7658 public void llSetPhysicsMaterial(int material_bits,
7659 float material_gravity_modifier, float material_restitution,
7660 float material_friction, float material_density)
7661 {
7662 SetPhysicsMaterial(m_host, material_bits, material_density, material_friction, material_restitution, material_gravity_modifier);
7663 }
7664
7635 public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) 7665 public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules)
7636 { 7666 {
7637 llSetLinkPrimitiveParamsFast(linknumber, rules); 7667 llSetLinkPrimitiveParamsFast(linknumber, rules);
@@ -8043,6 +8073,36 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
8043 part.ScriptSetPhysicsStatus(physics); 8073 part.ScriptSetPhysicsStatus(physics);
8044 break; 8074 break;
8045 8075
8076 case (int)ScriptBaseClass.PRIM_PHYSICS_SHAPE_TYPE:
8077 if (remain < 1)
8078 return;
8079
8080 int shape_type = rules.GetLSLIntegerItem(idx++);
8081
8082 ExtraPhysicsData physdata = new ExtraPhysicsData();
8083 physdata.Density = part.Density;
8084 physdata.Bounce = part.Bounciness;
8085 physdata.GravitationModifier = part.GravityModifier;
8086 physdata.PhysShapeType = (PhysShapeType)shape_type;
8087
8088 part.UpdateExtraPhysics(physdata);
8089
8090 break;
8091
8092 case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL:
8093 if (remain < 5)
8094 return;
8095
8096 int material_bits = rules.GetLSLIntegerItem(idx++);
8097 float material_density = (float)rules.GetLSLFloatItem(idx++);
8098 float material_friction = (float)rules.GetLSLFloatItem(idx++);
8099 float material_restitution = (float)rules.GetLSLFloatItem(idx++);
8100 float material_gravity_modifier = (float)rules.GetLSLFloatItem(idx++);
8101
8102 SetPhysicsMaterial(part, material_bits, material_density, material_friction, material_restitution, material_gravity_modifier);
8103
8104 break;
8105
8046 case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: 8106 case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ:
8047 if (remain < 1) 8107 if (remain < 1)
8048 return; 8108 return;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
index 8d97a7c..b976dc3 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
@@ -417,6 +417,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
417 LSL_String llXorBase64Strings(string str1, string str2); 417 LSL_String llXorBase64Strings(string str1, string str2);
418 LSL_String llXorBase64StringsCorrect(string str1, string str2); 418 LSL_String llXorBase64StringsCorrect(string str1, string str2);
419 LSL_Integer llGetLinkNumberOfSides(LSL_Integer link); 419 LSL_Integer llGetLinkNumberOfSides(LSL_Integer link);
420 void llSetPhysicsMaterial(int material_bits, float material_gravity_modifier, float material_restitution, float material_friction, float material_density);
420 421
421 void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules); 422 void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules);
422 LSL_List GetLinkPrimitiveParamsEx(LSL_Key prim, LSL_List rules); 423 LSL_List GetLinkPrimitiveParamsEx(LSL_Key prim, LSL_List rules);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
index ba75253..4ce3cf1 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
@@ -570,6 +570,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
570 public const int PRIM_MEDIA_PERM_OWNER = 1; 570 public const int PRIM_MEDIA_PERM_OWNER = 1;
571 public const int PRIM_MEDIA_PERM_GROUP = 2; 571 public const int PRIM_MEDIA_PERM_GROUP = 2;
572 public const int PRIM_MEDIA_PERM_ANYONE = 4; 572 public const int PRIM_MEDIA_PERM_ANYONE = 4;
573
574 public const int PRIM_PHYSICS_SHAPE_TYPE = 30;
575 public const int PRIM_PHYSICS_SHAPE_PRIM = 0;
576 public const int PRIM_PHYSICS_SHAPE_CONVEX = 2;
577 public const int PRIM_PHYSICS_SHAPE_NONE = 1;
578
579 public const int PRIM_PHYSICS_MATERIAL = 31;
580 public const int DENSITY = 1;
581 public const int FRICTION = 2;
582 public const int RESTITUTION = 4;
583 public const int GRAVITY_MULTIPLIER = 8;
573 584
574 // extra constants for llSetPrimMediaParams 585 // extra constants for llSetPrimMediaParams
575 public static readonly LSLInteger LSL_STATUS_OK = new LSLInteger(0); 586 public static readonly LSLInteger LSL_STATUS_OK = new LSLInteger(0);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
index a8d1ddb..bf58d13 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
@@ -1949,5 +1949,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
1949 { 1949 {
1950 m_LSL_Functions.llSetKeyframedMotion(frames, options); 1950 m_LSL_Functions.llSetKeyframedMotion(frames, options);
1951 } 1951 }
1952
1953 public void llSetPhysicsMaterial(int material_bits, float material_gravity_modifier, float material_restitution, float material_friction, float material_density)
1954 {
1955 m_LSL_Functions.llSetPhysicsMaterial(material_bits, material_gravity_modifier, material_restitution, material_friction, material_density);
1956 }
1952 } 1957 }
1953} 1958}