diff options
author | Melanie Thielker | 2008-09-01 23:35:52 +0000 |
---|---|---|
committer | Melanie Thielker | 2008-09-01 23:35:52 +0000 |
commit | 0e7bac07f65dc88057c33e366aa573471283476b (patch) | |
tree | 52fa60cd3385aa0f605126e574cc2880c008d350 | |
parent | This is an attempt to fix the handling of constants in LSL. (diff) | |
download | opensim-SC-0e7bac07f65dc88057c33e366aa573471283476b.zip opensim-SC-0e7bac07f65dc88057c33e366aa573471283476b.tar.gz opensim-SC-0e7bac07f65dc88057c33e366aa573471283476b.tar.bz2 opensim-SC-0e7bac07f65dc88057c33e366aa573471283476b.tar.xz |
Thank you, Ewe Loon, for a patch that fixes various aspects of
llSetPrimitiveParams and llSetLinkPrimitiveParams
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 96 |
1 files changed, 48 insertions, 48 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index a8c74ac..574760a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -5177,7 +5177,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5177 | return Util.Md5Hash(src + ":" + nonce.ToString()); | 5177 | return Util.Md5Hash(src + ":" + nonce.ToString()); |
5178 | } | 5178 | } |
5179 | 5179 | ||
5180 | private ObjectShapePacket.ObjectDataBlock SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist) | 5180 | private ObjectShapePacket.ObjectDataBlock SetPrimitiveBlockShapeParams(SceneObjectPart part, int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist) |
5181 | { | 5181 | { |
5182 | ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); | 5182 | ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); |
5183 | 5183 | ||
@@ -5220,38 +5220,38 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5220 | hollow = 0.95f; | 5220 | hollow = 0.95f; |
5221 | } | 5221 | } |
5222 | shapeBlock.ProfileHollow = (ushort)(50000 * hollow); | 5222 | shapeBlock.ProfileHollow = (ushort)(50000 * hollow); |
5223 | if (twist.x < -0.5f) | 5223 | if (twist.x < -1.0f) |
5224 | { | 5224 | { |
5225 | twist.x = -0.5f; | 5225 | twist.x = -1.0f; |
5226 | } | 5226 | } |
5227 | if (twist.x > 0.5f) | 5227 | if (twist.x > 1.0f) |
5228 | { | 5228 | { |
5229 | twist.x = 0.5f; | 5229 | twist.x = 1.0f; |
5230 | } | 5230 | } |
5231 | if (twist.y < -0.5f) | 5231 | if (twist.y < -1.0f) |
5232 | { | 5232 | { |
5233 | twist.y = -0.5f; | 5233 | twist.y = -1.0f; |
5234 | } | 5234 | } |
5235 | if (twist.y > 0.5f) | 5235 | if (twist.y > 1.0f) |
5236 | { | 5236 | { |
5237 | twist.y = 0.5f; | 5237 | twist.y = 1.0f; |
5238 | } | 5238 | } |
5239 | shapeBlock.PathTwistBegin = (sbyte)(200 * twist.x); | 5239 | shapeBlock.PathTwistBegin = (sbyte)(100 * twist.x); |
5240 | shapeBlock.PathTwist = (sbyte)(200 * twist.y); | 5240 | shapeBlock.PathTwist = (sbyte)(100 * twist.y); |
5241 | 5241 | ||
5242 | shapeBlock.ObjectLocalID = m_host.LocalId; | 5242 | shapeBlock.ObjectLocalID = part.LocalId; |
5243 | 5243 | ||
5244 | // retain pathcurve | 5244 | // retain pathcurve |
5245 | shapeBlock.PathCurve = m_host.Shape.PathCurve; | 5245 | shapeBlock.PathCurve = part.Shape.PathCurve; |
5246 | 5246 | ||
5247 | return shapeBlock; | 5247 | return shapeBlock; |
5248 | } | 5248 | } |
5249 | 5249 | ||
5250 | private void SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 taper_b, LSL_Types.Vector3 topshear, byte fudge) | 5250 | private void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 taper_b, LSL_Types.Vector3 topshear, byte fudge) |
5251 | { | 5251 | { |
5252 | ObjectShapePacket.ObjectDataBlock shapeBlock; | 5252 | ObjectShapePacket.ObjectDataBlock shapeBlock; |
5253 | 5253 | ||
5254 | shapeBlock = SetPrimitiveShapeParams(holeshape, cut, hollow, twist); | 5254 | shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist); |
5255 | 5255 | ||
5256 | shapeBlock.ProfileCurve += fudge; | 5256 | shapeBlock.ProfileCurve += fudge; |
5257 | 5257 | ||
@@ -5271,8 +5271,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5271 | { | 5271 | { |
5272 | taper_b.y = 2f; | 5272 | taper_b.y = 2f; |
5273 | } | 5273 | } |
5274 | shapeBlock.PathScaleX = (byte)(100 * taper_b.x); | 5274 | shapeBlock.PathScaleX = (byte)(100 * (2.0 - taper_b.x)); |
5275 | shapeBlock.PathScaleY = (byte)(100 * taper_b.y); | 5275 | shapeBlock.PathScaleY = (byte)(100 * (2.0 - taper_b.y)); |
5276 | if (topshear.x < -0.5f) | 5276 | if (topshear.x < -0.5f) |
5277 | { | 5277 | { |
5278 | topshear.x = -0.5f; | 5278 | topshear.x = -0.5f; |
@@ -5292,14 +5292,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5292 | shapeBlock.PathShearX = (byte)(100 * topshear.x); | 5292 | shapeBlock.PathShearX = (byte)(100 * topshear.x); |
5293 | shapeBlock.PathShearY = (byte)(100 * topshear.y); | 5293 | shapeBlock.PathShearY = (byte)(100 * topshear.y); |
5294 | 5294 | ||
5295 | m_host.UpdateShape(shapeBlock); | 5295 | part.UpdateShape(shapeBlock); |
5296 | } | 5296 | } |
5297 | 5297 | ||
5298 | private void SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 dimple, byte fudge) | 5298 | private void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 dimple, byte fudge) |
5299 | { | 5299 | { |
5300 | ObjectShapePacket.ObjectDataBlock shapeBlock; | 5300 | ObjectShapePacket.ObjectDataBlock shapeBlock; |
5301 | 5301 | ||
5302 | shapeBlock = SetPrimitiveShapeParams(holeshape, cut, hollow, twist); | 5302 | shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist); |
5303 | 5303 | ||
5304 | // profile/path swapped for a sphere | 5304 | // profile/path swapped for a sphere |
5305 | shapeBlock.PathBegin = shapeBlock.ProfileBegin; | 5305 | shapeBlock.PathBegin = shapeBlock.ProfileBegin; |
@@ -5333,14 +5333,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5333 | shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x); | 5333 | shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x); |
5334 | shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y)); | 5334 | shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y)); |
5335 | 5335 | ||
5336 | m_host.UpdateShape(shapeBlock); | 5336 | part.UpdateShape(shapeBlock); |
5337 | } | 5337 | } |
5338 | 5338 | ||
5339 | private void SetPrimitiveShapeParams(int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 holesize, LSL_Types.Vector3 topshear, LSL_Types.Vector3 profilecut, LSL_Types.Vector3 taper_a, float revolutions, float radiusoffset, float skew, byte fudge) | 5339 | private void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Types.Vector3 cut, float hollow, LSL_Types.Vector3 twist, LSL_Types.Vector3 holesize, LSL_Types.Vector3 topshear, LSL_Types.Vector3 profilecut, LSL_Types.Vector3 taper_a, float revolutions, float radiusoffset, float skew, byte fudge) |
5340 | { | 5340 | { |
5341 | ObjectShapePacket.ObjectDataBlock shapeBlock; | 5341 | ObjectShapePacket.ObjectDataBlock shapeBlock; |
5342 | 5342 | ||
5343 | shapeBlock = SetPrimitiveShapeParams(holeshape, cut, hollow, twist); | 5343 | shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist); |
5344 | 5344 | ||
5345 | shapeBlock.ProfileCurve += fudge; | 5345 | shapeBlock.ProfileCurve += fudge; |
5346 | 5346 | ||
@@ -5432,7 +5432,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5432 | { | 5432 | { |
5433 | revolutions = 4f; | 5433 | revolutions = 4f; |
5434 | } | 5434 | } |
5435 | shapeBlock.PathRevolutions = (byte)(100 * revolutions); | 5435 | shapeBlock.PathRevolutions = (byte)(66.666667 * (revolutions - 1.0)); |
5436 | // limits on radiusoffset depend on revolutions and hole size (how?) seems like the maximum range is 0 to 1 | 5436 | // limits on radiusoffset depend on revolutions and hole size (how?) seems like the maximum range is 0 to 1 |
5437 | if (radiusoffset < 0f) | 5437 | if (radiusoffset < 0f) |
5438 | { | 5438 | { |
@@ -5453,10 +5453,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5453 | } | 5453 | } |
5454 | shapeBlock.PathSkew = (sbyte)(100 * skew); | 5454 | shapeBlock.PathSkew = (sbyte)(100 * skew); |
5455 | 5455 | ||
5456 | m_host.UpdateShape(shapeBlock); | 5456 | part.UpdateShape(shapeBlock); |
5457 | } | 5457 | } |
5458 | 5458 | ||
5459 | private void SetPrimitiveShapeParams(string map, int type) | 5459 | private void SetPrimitiveShapeParams(SceneObjectPart part, string map, int type) |
5460 | { | 5460 | { |
5461 | ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); | 5461 | ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); |
5462 | LLUUID sculptId; | 5462 | LLUUID sculptId; |
@@ -5467,7 +5467,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5467 | return; | 5467 | return; |
5468 | } | 5468 | } |
5469 | 5469 | ||
5470 | shapeBlock.ObjectLocalID = m_host.LocalId; | 5470 | shapeBlock.ObjectLocalID = part.LocalId; |
5471 | shapeBlock.PathScaleX = 100; | 5471 | shapeBlock.PathScaleX = 100; |
5472 | shapeBlock.PathScaleY = 150; | 5472 | shapeBlock.PathScaleY = 150; |
5473 | 5473 | ||
@@ -5481,11 +5481,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5481 | } | 5481 | } |
5482 | 5482 | ||
5483 | // retain pathcurve | 5483 | // retain pathcurve |
5484 | shapeBlock.PathCurve = m_host.Shape.PathCurve; | 5484 | shapeBlock.PathCurve = part.Shape.PathCurve; |
5485 | 5485 | ||
5486 | m_host.Shape.SetSculptData((byte)type, sculptId); | 5486 | part.Shape.SetSculptData((byte)type, sculptId); |
5487 | m_host.Shape.SculptEntry = true; | 5487 | part.Shape.SculptEntry = true; |
5488 | m_host.UpdateShape(shapeBlock); | 5488 | part.UpdateShape(shapeBlock); |
5489 | } | 5489 | } |
5490 | 5490 | ||
5491 | public void llSetPrimitiveParams(LSL_Types.list rules) | 5491 | public void llSetPrimitiveParams(LSL_Types.list rules) |
@@ -5572,8 +5572,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5572 | twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 5572 | twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); |
5573 | taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 5573 | taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); |
5574 | topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 5574 | topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString()); |
5575 | m_host.Shape.PathCurve = (byte) Extrusion.Straight; | 5575 | part.Shape.PathCurve = (byte)Extrusion.Straight; |
5576 | SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, topshear, 1); | 5576 | SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, 1); |
5577 | break; | 5577 | break; |
5578 | 5578 | ||
5579 | case (int)ScriptBaseClass.PRIM_TYPE_CYLINDER: | 5579 | case (int)ScriptBaseClass.PRIM_TYPE_CYLINDER: |
@@ -5586,9 +5586,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5586 | twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 5586 | twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); |
5587 | taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 5587 | taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); |
5588 | topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 5588 | topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString()); |
5589 | m_host.Shape.ProfileShape = ProfileShape.Circle; | 5589 | part.Shape.ProfileShape = ProfileShape.Circle; |
5590 | m_host.Shape.PathCurve = (byte) Extrusion.Straight; | 5590 | part.Shape.PathCurve = (byte)Extrusion.Straight; |
5591 | SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, topshear, 0); | 5591 | SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, 0); |
5592 | break; | 5592 | break; |
5593 | 5593 | ||
5594 | case (int)ScriptBaseClass.PRIM_TYPE_PRISM: | 5594 | case (int)ScriptBaseClass.PRIM_TYPE_PRISM: |
@@ -5601,8 +5601,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5601 | twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 5601 | twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); |
5602 | taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 5602 | taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); |
5603 | topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 5603 | topshear = new LSL_Types.Vector3(rules.Data[idx++].ToString()); |
5604 | m_host.Shape.PathCurve = (byte) Extrusion.Straight; | 5604 | part.Shape.PathCurve = (byte)Extrusion.Straight; |
5605 | SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, topshear, 3); | 5605 | SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, 3); |
5606 | break; | 5606 | break; |
5607 | 5607 | ||
5608 | case (int)ScriptBaseClass.PRIM_TYPE_SPHERE: | 5608 | case (int)ScriptBaseClass.PRIM_TYPE_SPHERE: |
@@ -5614,8 +5614,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5614 | hollow = (float)Convert.ToDouble(rules.Data[idx++]); | 5614 | hollow = (float)Convert.ToDouble(rules.Data[idx++]); |
5615 | twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); | 5615 | twist = new LSL_Types.Vector3(rules.Data[idx++].ToString()); |
5616 | taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); // dimple | 5616 | taper_b = new LSL_Types.Vector3(rules.Data[idx++].ToString()); // dimple |
5617 | m_host.Shape.PathCurve = (byte) Extrusion.Curve1; | 5617 | part.Shape.PathCurve = (byte)Extrusion.Curve1; |
5618 | SetPrimitiveShapeParams(face, v, hollow, twist, taper_b, 5); | 5618 | SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, 5); |
5619 | break; | 5619 | break; |
5620 | 5620 | ||
5621 | case (int)ScriptBaseClass.PRIM_TYPE_TORUS: | 5621 | case (int)ScriptBaseClass.PRIM_TYPE_TORUS: |
@@ -5633,8 +5633,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5633 | revolutions = (float)Convert.ToDouble(rules.Data[idx++]); | 5633 | revolutions = (float)Convert.ToDouble(rules.Data[idx++]); |
5634 | radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]); | 5634 | radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]); |
5635 | skew = (float)Convert.ToDouble(rules.Data[idx++]); | 5635 | skew = (float)Convert.ToDouble(rules.Data[idx++]); |
5636 | m_host.Shape.PathCurve = (byte) Extrusion.Curve1; | 5636 | part.Shape.PathCurve = (byte)Extrusion.Curve1; |
5637 | SetPrimitiveShapeParams(face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 0); | 5637 | SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 0); |
5638 | break; | 5638 | break; |
5639 | 5639 | ||
5640 | case (int)ScriptBaseClass.PRIM_TYPE_TUBE: | 5640 | case (int)ScriptBaseClass.PRIM_TYPE_TUBE: |
@@ -5652,8 +5652,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5652 | revolutions = (float)Convert.ToDouble(rules.Data[idx++]); | 5652 | revolutions = (float)Convert.ToDouble(rules.Data[idx++]); |
5653 | radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]); | 5653 | radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]); |
5654 | skew = (float)Convert.ToDouble(rules.Data[idx++]); | 5654 | skew = (float)Convert.ToDouble(rules.Data[idx++]); |
5655 | m_host.Shape.PathCurve = (byte) Extrusion.Curve1; | 5655 | part.Shape.PathCurve = (byte)Extrusion.Curve1; |
5656 | SetPrimitiveShapeParams(face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 1); | 5656 | SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 1); |
5657 | break; | 5657 | break; |
5658 | 5658 | ||
5659 | case (int)ScriptBaseClass.PRIM_TYPE_RING: | 5659 | case (int)ScriptBaseClass.PRIM_TYPE_RING: |
@@ -5671,8 +5671,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5671 | revolutions = (float)Convert.ToDouble(rules.Data[idx++]); | 5671 | revolutions = (float)Convert.ToDouble(rules.Data[idx++]); |
5672 | radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]); | 5672 | radiusoffset = (float)Convert.ToDouble(rules.Data[idx++]); |
5673 | skew = (float)Convert.ToDouble(rules.Data[idx++]); | 5673 | skew = (float)Convert.ToDouble(rules.Data[idx++]); |
5674 | m_host.Shape.PathCurve = (byte) Extrusion.Curve1; | 5674 | part.Shape.PathCurve = (byte)Extrusion.Curve1; |
5675 | SetPrimitiveShapeParams(face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 3); | 5675 | SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, revolutions, radiusoffset, skew, 3); |
5676 | break; | 5676 | break; |
5677 | 5677 | ||
5678 | case (int)ScriptBaseClass.PRIM_TYPE_SCULPT: | 5678 | case (int)ScriptBaseClass.PRIM_TYPE_SCULPT: |
@@ -5681,8 +5681,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5681 | 5681 | ||
5682 | string map = rules.Data[idx++].ToString(); | 5682 | string map = rules.Data[idx++].ToString(); |
5683 | face = Convert.ToInt32(rules.Data[idx++].ToString()); // type | 5683 | face = Convert.ToInt32(rules.Data[idx++].ToString()); // type |
5684 | m_host.Shape.PathCurve = (byte) Extrusion.Curve1; | 5684 | part.Shape.PathCurve = (byte)Extrusion.Curve1; |
5685 | SetPrimitiveShapeParams(map, face); | 5685 | SetPrimitiveShapeParams(part, map, face); |
5686 | break; | 5686 | break; |
5687 | } | 5687 | } |
5688 | 5688 | ||