diff options
author | Melanie | 2012-03-13 22:20:12 +0100 |
---|---|---|
committer | Melanie | 2012-03-13 22:20:12 +0100 |
commit | 838818270785c58d7b2df221b8b94397aa3cdb04 (patch) | |
tree | b695fe9a94e8b1c170c1bb97b6b3873a671e3efa /OpenSim/Region/ScriptEngine/Shared/Api/Implementation | |
parent | Hook up the new cap to the SOP changes (diff) | |
download | opensim-SC_OLD-838818270785c58d7b2df221b8b94397aa3cdb04.zip opensim-SC_OLD-838818270785c58d7b2df221b8b94397aa3cdb04.tar.gz opensim-SC_OLD-838818270785c58d7b2df221b8b94397aa3cdb04.tar.bz2 opensim-SC_OLD-838818270785c58d7b2df221b8b94397aa3cdb04.tar.xz |
Implement llSetPrimitiveParams for physics shape and material. Add
llSetPhysicsMaterial support.
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 60 |
1 files changed, 60 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; |