diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index 4c58e36..1999945 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs | |||
@@ -1042,6 +1042,33 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
1042 | } | 1042 | } |
1043 | } | 1043 | } |
1044 | 1044 | ||
1045 | private void SetFlexi(SceneObjectPart part, bool flexi, int softness, float gravity, float friction, | ||
1046 | float wind, float tension, LSL_Types.Vector3 Force) | ||
1047 | { | ||
1048 | if (part == null) | ||
1049 | return; | ||
1050 | |||
1051 | if (flexi) | ||
1052 | { | ||
1053 | part.Shape.FlexiEntry = true; // this setting flexi true isn't working, but the below parameters do | ||
1054 | // work once the prim is already flexi | ||
1055 | part.Shape.FlexiSoftness = softness; | ||
1056 | part.Shape.FlexiGravity = gravity; | ||
1057 | part.Shape.FlexiDrag = friction; | ||
1058 | part.Shape.FlexiWind = wind; | ||
1059 | part.Shape.FlexiTension = tension; | ||
1060 | part.Shape.FlexiForceX = (float)Force.x; | ||
1061 | part.Shape.FlexiForceY = (float)Force.y; | ||
1062 | part.Shape.FlexiForceZ = (float)Force.z; | ||
1063 | |||
1064 | } | ||
1065 | else | ||
1066 | { | ||
1067 | part.Shape.FlexiEntry = false; | ||
1068 | } | ||
1069 | part.SendFullUpdateToAllClients(); | ||
1070 | } | ||
1071 | |||
1045 | public LSL_Types.Vector3 llGetColor(int face) | 1072 | public LSL_Types.Vector3 llGetColor(int face) |
1046 | { | 1073 | { |
1047 | m_host.AddScriptLPS(1); | 1074 | m_host.AddScriptLPS(1); |
@@ -4612,7 +4639,14 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
4612 | SetPos(part, v); | 4639 | SetPos(part, v); |
4613 | 4640 | ||
4614 | break; | 4641 | break; |
4642 | case 7: // PRIM_SIZE | ||
4643 | if (remain < 1) | ||
4644 | return; | ||
4615 | 4645 | ||
4646 | v=new LSL_Types.Vector3(rules.Data[idx++].ToString()); | ||
4647 | SetScale(part, v); | ||
4648 | |||
4649 | break; | ||
4616 | case 8: // PRIM_ROTATION | 4650 | case 8: // PRIM_ROTATION |
4617 | if (remain < 1) | 4651 | if (remain < 1) |
4618 | return; | 4652 | return; |
@@ -4651,15 +4685,22 @@ namespace OpenSim.Region.ScriptEngine.Common | |||
4651 | SetAlpha(part, alpha, face); | 4685 | SetAlpha(part, alpha, face); |
4652 | 4686 | ||
4653 | break; | 4687 | break; |
4654 | 4688 | case 21: // PRIM_FLEXI | |
4655 | case 7: // PRIM_SIZE | 4689 | if (remain < 7) |
4656 | if (remain < 1) | ||
4657 | return; | 4690 | return; |
4658 | 4691 | ||
4659 | v=new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 4692 | int flexi = Convert.ToInt32(rules.Data[idx++]); |
4660 | SetScale(part, v); | 4693 | int softness = Convert.ToInt32(rules.Data[idx++]); |
4694 | float gravity = (float)Convert.ToDouble(rules.Data[idx++]); | ||
4695 | float friction = (float)Convert.ToDouble(rules.Data[idx++]); | ||
4696 | float wind = (float)Convert.ToDouble(rules.Data[idx++]); | ||
4697 | float tension = (float)Convert.ToDouble(rules.Data[idx++]); | ||
4698 | LSL_Types.Vector3 force =new LSL_Types.Vector3(rules.Data[idx++].ToString()); | ||
4699 | |||
4700 | SetFlexi(part, (flexi == 1), softness, gravity, friction, wind, tension, force); | ||
4661 | 4701 | ||
4662 | break; | 4702 | break; |
4703 | |||
4663 | } | 4704 | } |
4664 | } | 4705 | } |
4665 | } | 4706 | } |