| Attached Files | LSL_Type_tweaks-Vector3.patch [^] (38,986 bytes) 2012-08-18 00:23 [Show Content] [Hide Content]From f15694042c29676ee81c98b50e355ada9d47c718 Mon Sep 17 00:00:00 2001
From: SignpostMarv <github@signpostmarv.name>
Date: Sat, 18 Aug 2012 01:17:01 +0100
Subject: [PATCH] refactoring for Vector3 operator & constructor tweaks
---
.../Shared/Api/Implementation/LSL_Api.cs | 107 +++++++++------------
.../Shared/Api/Implementation/LS_Api.cs | 8 +-
.../Shared/Api/Implementation/MOD_Api.cs | 7 +-
.../Shared/Api/Implementation/OSSL_Api.cs | 22 ++---
.../Api/Implementation/Plugins/SensorRepeat.cs | 9 +-
OpenSim/Region/ScriptEngine/Shared/Helpers.cs | 28 ++----
OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | 39 ++++++++
.../Region/ScriptEngine/XEngine/EventManager.cs | 20 ++--
OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 4 +-
9 files changed, 119 insertions(+), 125 deletions(-)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 6a2b829..9dd1a78 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -1097,9 +1097,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public LSL_Float llGround(LSL_Vector offset)
{
m_host.AddScriptLPS(1);
- Vector3 pos = m_host.GetWorldPosition() + new Vector3((float)offset.x,
- (float)offset.y,
- (float)offset.z);
+ Vector3 pos = m_host.GetWorldPosition() + (Vector3)offset;
//Get the slope normal. This gives us the equation of the plane tangent to the slope.
LSL_Vector vsn = llGroundNormal(offset);
@@ -1387,7 +1385,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (face == ScriptBaseClass.ALL_SIDES)
face = SceneObjectPart.ALL_SIDES;
- m_host.SetFaceColor(new Vector3((float)color.x, (float)color.y, (float)color.z), face);
+ m_host.SetFaceColor(color, face);
}
public void SetTexGen(SceneObjectPart part, int face,int style)
@@ -1974,7 +1972,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
bool sameParcel = here.GlobalID == there.GlobalID;
- if (!sameParcel && !World.Permissions.CanRezObject(m_host.ParentGroup.PrimCount, m_host.ParentGroup.OwnerID, new Vector3((float)pos.x, (float)pos.y, (float)pos.z)))
+ if (!sameParcel && !World.Permissions.CanRezObject(
+ m_host.ParentGroup.PrimCount, m_host.ParentGroup.OwnerID, pos))
{
return 0;
}
@@ -2034,13 +2033,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if ((targetPos.z < ground) && disable_underground_movement && m_host.ParentGroup.AttachmentPoint == 0)
targetPos.z = ground;
SceneObjectGroup parent = part.ParentGroup;
- LSL_Vector real_vec = !adjust ? targetPos : SetPosAdjust(currentPos, targetPos);
- parent.UpdateGroupPosition(new Vector3((float)real_vec.x, (float)real_vec.y, (float)real_vec.z));
+ parent.UpdateGroupPosition(!adjust ? targetPos :
+ SetPosAdjust(currentPos, targetPos));
}
else
{
- LSL_Vector rel_vec = !adjust ? targetPos : SetPosAdjust(currentPos, targetPos);
- part.OffsetPosition = new Vector3((float)rel_vec.x, (float)rel_vec.y, (float)rel_vec.z);
+ part.OffsetPosition = !adjust ? targetPos : SetPosAdjust(
+ currentPos, targetPos);
SceneObjectGroup parent = part.ParentGroup;
parent.HasGroupChanged = true;
parent.ScheduleGroupForTerseUpdate();
@@ -2084,7 +2083,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// m_log.DebugFormat("[LSL API]: Returning {0} in GetPartLocalPos()", pos);
- return new LSL_Vector(pos.X, pos.Y, pos.Z);
+ return new LSL_Vector(pos);
}
public void llSetRot(LSL_Rotation rot)
@@ -2198,7 +2197,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (local != 0)
force *= llGetRot();
- m_host.ParentGroup.RootPart.SetForce(new Vector3((float)force.x, (float)force.y, (float)force.z));
+ m_host.ParentGroup.RootPart.SetForce(force);
}
}
@@ -2210,10 +2209,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (!m_host.ParentGroup.IsDeleted)
{
- Vector3 tmpForce = m_host.ParentGroup.RootPart.GetForce();
- force.x = tmpForce.X;
- force.y = tmpForce.Y;
- force.z = tmpForce.Z;
+ force = m_host.ParentGroup.RootPart.GetForce();
}
return force;
@@ -2222,8 +2218,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public LSL_Integer llTarget(LSL_Vector position, double range)
{
m_host.AddScriptLPS(1);
- return m_host.ParentGroup.registerTargetWaypoint(
- new Vector3((float)position.x, (float)position.y, (float)position.z), (float)range);
+ return m_host.ParentGroup.registerTargetWaypoint(position,
+ (float)range);
}
public void llTargetRemove(int number)
@@ -2248,7 +2244,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llMoveToTarget(LSL_Vector target, double tau)
{
m_host.AddScriptLPS(1);
- m_host.MoveToTarget(new Vector3((float)target.x, (float)target.y, (float)target.z), (float)tau);
+ m_host.MoveToTarget(target, (float)tau);
}
public void llStopMoveToTarget()
@@ -2261,7 +2257,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{
m_host.AddScriptLPS(1);
//No energy force yet
- Vector3 v = new Vector3((float)force.x, (float)force.y, (float)force.z);
+ Vector3 v = force;
if (v.Length() > 20000.0f)
{
v.Normalize();
@@ -2273,13 +2269,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llApplyRotationalImpulse(LSL_Vector force, int local)
{
m_host.AddScriptLPS(1);
- m_host.ApplyAngularImpulse(new Vector3((float)force.x, (float)force.y, (float)force.z), local != 0);
+ m_host.ApplyAngularImpulse(force, local != 0);
}
public void llSetTorque(LSL_Vector torque, int local)
{
m_host.AddScriptLPS(1);
- m_host.SetAngularImpulse(new Vector3((float)torque.x, (float)torque.y, (float)torque.z), local != 0);
+ m_host.SetAngularImpulse(torque, local != 0);
}
public LSL_Vector llGetTorque()
@@ -2830,13 +2826,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return;
}
- Vector3 llpos = new Vector3((float)pos.x, (float)pos.y, (float)pos.z);
- Vector3 llvel = new Vector3((float)vel.x, (float)vel.y, (float)vel.z);
-
// need the magnitude later
// float velmag = (float)Util.GetMagnitude(llvel);
- SceneObjectGroup new_group = World.RezObject(m_host, item, llpos, Rot2Quaternion(rot), llvel, param);
+ SceneObjectGroup new_group = World.RezObject(m_host, item, pos, Rot2Quaternion(rot), vel, param);
// If either of these are null, then there was an unknown error.
if (new_group == null)
@@ -2857,10 +2850,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
PhysicsActor pa = new_group.RootPart.PhysActor;
- if (pa != null && pa.IsPhysical && llvel != Vector3.Zero)
+ if (pa != null && pa.IsPhysical && (Vector3)vel != Vector3.Zero)
{
//Recoil.
- llApplyImpulse(new LSL_Vector(llvel.X * groupmass, llvel.Y * groupmass, llvel.Z * groupmass), 0);
+ llApplyImpulse(vel * groupmass, 0);
}
// Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay)
});
@@ -3381,7 +3374,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
protected void TargetOmega(SceneObjectPart part, LSL_Vector axis, double spinrate, double gain)
{
- part.UpdateAngularVelocity(new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)));
+ part.UpdateAngularVelocity(axis * spinrate);
}
public LSL_Integer llGetStartParameter()
@@ -3588,7 +3581,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
List<SceneObjectPart> parts = GetLinkParts(linknumber);
foreach (SceneObjectPart part in parts)
- part.SetFaceColor(new Vector3((float)color.x, (float)color.y, (float)color.z), face);
+ part.SetFaceColor(color, face);
}
public void llCreateLink(string target, int parent)
@@ -4019,8 +4012,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llSetText(string text, LSL_Vector color, double alpha)
{
m_host.AddScriptLPS(1);
- Vector3 av3 = Util.Clip(new Vector3((float)color.x, (float)color.y,
- (float)color.z), 0.0f, 1.0f);
+ Vector3 av3 = Util.Clip(color, 0.0f, 1.0f);
m_host.SetText(text.Length > 254 ? text.Remove(254) : text, av3, Util.Clip((float)alpha, 0.0f, 1.0f));
//m_host.ParentGroup.HasGroupChanged = true;
//m_host.ParentGroup.ScheduleGroupForFullUpdate();
@@ -4217,14 +4209,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
ScriptSleep(5000);
}
- public void llTeleportAgent(string agent, string destination, LSL_Vector pos, LSL_Vector lookAt)
+ public void llTeleportAgent(string agent, string destination, LSL_Vector targetPos, LSL_Vector targetLookAt)
{
m_host.AddScriptLPS(1);
UUID agentId = new UUID();
- Vector3 targetPos = new Vector3((float)pos.x, (float)pos.y, (float)pos.z);
- Vector3 targetLookAt = new Vector3((float)lookAt.x, (float)lookAt.y, (float)lookAt.z);
-
if (UUID.TryParse(agent, out agentId))
{
ScenePresence presence = World.GetScenePresence(agentId);
@@ -4253,15 +4242,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
}
- public void llTeleportAgentGlobalCoords(string agent, LSL_Vector global_coords, LSL_Vector pos, LSL_Vector lookAt)
+ public void llTeleportAgentGlobalCoords(string agent, LSL_Vector global_coords, LSL_Vector targetPos, LSL_Vector targetLookAt)
{
m_host.AddScriptLPS(1);
UUID agentId = new UUID();
ulong regionHandle = Utils.UIntsToLong((uint)global_coords.x, (uint)global_coords.y);
- Vector3 targetPos = new Vector3((float)pos.x, (float)pos.y, (float)pos.z);
- Vector3 targetLookAt = new Vector3((float)lookAt.x, (float)lookAt.y, (float)lookAt.z);
if (UUID.TryParse(agent, out agentId))
{
ScenePresence presence = World.GetScenePresence(agentId);
@@ -4545,7 +4532,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
distance_attenuation = 1f / normalized_units;
}
- Vector3 applied_linear_impulse = new Vector3((float)impulse.x, (float)impulse.y, (float)impulse.z);
+ Vector3 applied_linear_impulse = impulse;
{
float impulse_length = applied_linear_impulse.Length();
@@ -6044,9 +6031,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
//Plug the x,y coordinates of the slope normal into the equation of the plane to get
//the height of that point on the plane. The resulting vector gives the slope.
- Vector3 vsl = new Vector3();
- vsl.X = (float)vsn.x;
- vsl.Y = (float)vsn.y;
+ Vector3 vsl = vsn;
vsl.Z = (float)(((vsn.x * vsn.x) + (vsn.y * vsn.y)) / (-1 * vsn.z));
vsl.Normalize();
//Normalization might be overkill here
@@ -6057,9 +6042,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public LSL_Vector llGroundNormal(LSL_Vector offset)
{
m_host.AddScriptLPS(1);
- Vector3 pos = m_host.GetWorldPosition() + new Vector3((float)offset.x,
- (float)offset.y,
- (float)offset.z);
+ Vector3 pos = m_host.GetWorldPosition() + (Vector3)offset;
// Clamp to valid position
if (pos.X < 0)
pos.X = 0;
@@ -6512,8 +6495,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (!m_host.ParentGroup.IsDeleted)
{
- m_host.ParentGroup.RootPart.SetVehicleVectorParam(param,
- new Vector3((float)vec.x, (float)vec.y, (float)vec.z));
+ m_host.ParentGroup.RootPart.SetVehicleVectorParam(param, vec);
}
}
@@ -6555,7 +6537,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0)
rot.z = 1; // ZERO_ROTATION = 0,0,0,1
- part.SitTargetPosition = new Vector3((float)offset.x, (float)offset.y, (float)offset.z);
+ part.SitTargetPosition = offset;
part.SitTargetOrientation = Rot2Quaternion(rot);
part.ParentGroup.HasGroupChanged = true;
}
@@ -6659,13 +6641,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llSetCameraEyeOffset(LSL_Vector offset)
{
m_host.AddScriptLPS(1);
- m_host.SetCameraEyeOffset(new Vector3((float)offset.x, (float)offset.y, (float)offset.z));
+ m_host.SetCameraEyeOffset(offset);
}
public void llSetCameraAtOffset(LSL_Vector offset)
{
m_host.AddScriptLPS(1);
- m_host.SetCameraAtOffset(new Vector3((float)offset.x, (float)offset.y, (float)offset.z));
+ m_host.SetCameraAtOffset(offset);
}
public LSL_String llDumpList2String(LSL_List src, string seperator)
@@ -6687,7 +6669,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public LSL_Integer llScriptDanger(LSL_Vector pos)
{
m_host.AddScriptLPS(1);
- bool result = World.ScriptDanger(m_host.LocalId, new Vector3((float)pos.x, (float)pos.y, (float)pos.z));
+ bool result = World.ScriptDanger(m_host.LocalId, pos);
if (result)
{
return 1;
@@ -7515,7 +7497,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
LSL_Vector color=rules.GetVector3Item(idx++);
double alpha=(double)rules.GetLSLFloatItem(idx++);
- part.SetFaceColor(new Vector3((float)color.x, (float)color.y, (float)color.z), face);
+ part.SetFaceColor(color, face);
SetAlpha(part, alpha, face);
break;
@@ -7634,9 +7616,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
string primText = rules.GetLSLStringItem(idx++);
LSL_Vector primTextColor = rules.GetVector3Item(idx++);
LSL_Float primTextAlpha = rules.GetLSLFloatItem(idx++);
- Vector3 av3 = Util.Clip(new Vector3((float)primTextColor.x,
- (float)primTextColor.y,
- (float)primTextColor.z), 0.0f, 1.0f);
+ Vector3 av3 = Util.Clip(primTextColor, 0.0f, 1.0f);
part.SetText(primText, av3, Util.Clip((float)primTextAlpha, 0.0f, 1.0f));
break;
@@ -7691,11 +7671,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (part.ParentGroup.RootPart == part)
{
SceneObjectGroup parent = part.ParentGroup;
- parent.UpdateGroupPosition(new Vector3((float)currentPosition.x, (float)currentPosition.y, (float)currentPosition.z));
+ parent.UpdateGroupPosition(currentPosition);
}
else
{
- part.OffsetPosition = new Vector3((float)currentPosition.x, (float)currentPosition.y, (float)currentPosition.z);
+ part.OffsetPosition = currentPosition;
SceneObjectGroup parent = part.ParentGroup;
parent.HasGroupChanged = true;
parent.ScheduleGroupForTerseUpdate();
@@ -7932,8 +7912,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (part != null)
{
Vector3 halfSize = part.Scale / 2.0f;
- LSL_Vector lower = new LSL_Vector(halfSize.X * -1.0f, halfSize.Y * -1.0f, halfSize.Z * -1.0f);
- LSL_Vector upper = new LSL_Vector(halfSize.X, halfSize.Y, halfSize.Z);
+ LSL_Vector lower = (new LSL_Vector(halfSize)) * -1.0f;
+ LSL_Vector upper = new LSL_Vector(halfSize);
result.Add(lower);
result.Add(upper);
return result;
@@ -9943,9 +9923,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
ScenePresence avatar = World.GetScenePresence(detectedParams.Key);
if (avatar != null)
{
- avatar.ControllingClient.SendScriptTeleportRequest(m_host.Name, simname,
- new Vector3((float)pos.x, (float)pos.y, (float)pos.z),
- new Vector3((float)lookAt.x, (float)lookAt.y, (float)lookAt.z));
+ avatar.ControllingClient.SendScriptTeleportRequest(m_host.Name,
+ simname, pos, lookAt);
}
ScriptSleep(1000);
}
@@ -11143,8 +11122,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
m_host.AddScriptLPS(1);
- Vector3 rayStart = new Vector3((float)start.x, (float)start.y, (float)start.z);
- Vector3 rayEnd = new Vector3((float)end.x, (float)end.y, (float)end.z);
+ Vector3 rayStart = start;
+ Vector3 rayEnd = end;
Vector3 dir = rayEnd - rayStart;
float dist = Vector3.Mag(dir);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs
index 795de80..ceb4660 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LS_Api.cs
@@ -304,7 +304,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
case (int)ScriptBaseClass.WL_CLOUD_DETAIL_XY_DENSITY:
idx++;
iV = rules.GetVector3Item(idx);
- wl.cloudDetailXYDensity = new Vector3((float)iV.x, (float)iV.y, (float)iV.z);
+ wl.cloudDetailXYDensity = iV;
break;
case (int)ScriptBaseClass.WL_CLOUD_SCALE:
idx++;
@@ -329,7 +329,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
case (int)ScriptBaseClass.WL_CLOUD_XY_DENSITY:
idx++;
iV = rules.GetVector3Item(idx);
- wl.cloudXYDensity = new Vector3((float)iV.x, (float)iV.y, (float)iV.z);
+ wl.cloudXYDensity = iV;
break;
case (int)ScriptBaseClass.WL_DENSITY_MULTIPLIER:
idx++;
@@ -384,7 +384,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
case (int)ScriptBaseClass.WL_REFLECTION_WAVELET_SCALE:
idx++;
iV = rules.GetVector3Item(idx);
- wl.reflectionWaveletScale = new Vector3((float)iV.x, (float)iV.y, (float)iV.z);
+ wl.reflectionWaveletScale = iV;
break;
case (int)ScriptBaseClass.WL_REFRACT_SCALE_ABOVE:
idx++;
@@ -422,7 +422,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
case (int)ScriptBaseClass.WL_WATER_COLOR:
idx++;
iV = rules.GetVector3Item(idx);
- wl.waterColor = new Vector3((float)iV.x, (float)iV.y, (float)iV.z);
+ wl.waterColor = iV;
break;
case (int)ScriptBaseClass.WL_WATER_FOG_DENSITY_EXPONENT:
idx++;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
index 7844c75..929948b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
@@ -343,8 +343,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{
if (type == typeof(OpenMetaverse.Vector3))
{
- LSL_Vector vect = (LSL_Vector)lslparm;
- return new OpenMetaverse.Vector3((float)vect.x,(float)vect.y,(float)vect.z);
+ return (OpenMetaverse.Vector3)((LSL_Vector)lslparm);
}
}
@@ -372,8 +371,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
else if (plist[i] is LSL_Vector)
{
- LSL_Vector vect = (LSL_Vector)plist[i];
- result[i] = new OpenMetaverse.Vector3((float)vect.x,(float)vect.y,(float)vect.z);
+ result[i] = (OpenMetaverse.Vector3)(
+ (LSL_Vector)plist[i]);
}
else
MODError("unknown LSL list element type");
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 859ee93..eff1598 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -773,10 +773,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// We will launch the teleport on a new thread so that when the script threads are terminated
// before teleport in ScriptInstance.GetXMLState(), we don't end up aborting the one doing the teleporting.
- Util.FireAndForget(
- o => World.RequestTeleportLocation(presence.ControllingClient, regionName,
- new Vector3((float)position.x, (float)position.y, (float)position.z),
- new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation));
+ Util.FireAndForget(o => World.RequestTeleportLocation(
+ presence.ControllingClient, regionName, position,
+ lookat, (uint)TPFlags.ViaLocation));
ScriptSleep(5000);
@@ -819,10 +818,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// We will launch the teleport on a new thread so that when the script threads are terminated
// before teleport in ScriptInstance.GetXMLState(), we don't end up aborting the one doing the teleporting.
- Util.FireAndForget(
- o => World.RequestTeleportLocation(presence.ControllingClient, regionHandle,
- new Vector3((float)position.x, (float)position.y, (float)position.z),
- new Vector3((float)lookat.x, (float)lookat.y, (float)lookat.z), (uint)TPFlags.ViaLocation));
+ Util.FireAndForget(o => World.RequestTeleportLocation(
+ presence.ControllingClient, regionHandle,
+ position, lookat, (uint)TPFlags.ViaLocation));
ScriptSleep(5000);
@@ -2329,7 +2327,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
ownerID = m_host.OwnerID;
UUID x = module.CreateNPC(firstname,
lastname,
- new Vector3((float) position.x, (float) position.y, (float) position.z),
+ position,
ownerID,
senseAsAgent,
World,
@@ -2446,7 +2444,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return new LSL_Vector(0, 0, 0);
}
- public void osNpcMoveTo(LSL_Key npc, LSL_Vector position)
+ public void osNpcMoveTo(LSL_Key npc, LSL_Vector pos)
{
CheckThreatLevel(ThreatLevel.High, "osNpcMoveTo");
m_host.AddScriptLPS(1);
@@ -2461,7 +2459,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (!module.CheckPermissions(npcId, m_host.OwnerID))
return;
- Vector3 pos = new Vector3((float) position.x, (float) position.y, (float) position.z);
module.MoveToTarget(npcId, World, pos, false, true, false);
}
}
@@ -2481,11 +2478,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (!module.CheckPermissions(npcId, m_host.OwnerID))
return;
- Vector3 pos = new Vector3((float)target.x, (float)target.y, (float)target.z);
module.MoveToTarget(
new UUID(npc.m_string),
World,
- pos,
+ target,
(options & ScriptBaseClass.OS_NPC_NO_FLY) != 0,
(options & ScriptBaseClass.OS_NPC_LAND_AT_TARGET) != 0,
(options & ScriptBaseClass.OS_NPC_RUNNING) != 0);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
index a626be8..7162226 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
@@ -428,9 +428,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
try
{
Vector3 diff = toRegionPos - fromRegionPos;
- LSL_Types.Vector3 obj_dir = new LSL_Types.Vector3(diff.X, diff.Y, diff.Z);
- double dot = LSL_Types.Vector3.Dot(forward_dir, obj_dir);
- double mag_obj = LSL_Types.Vector3.Mag(obj_dir);
+ double dot = LSL_Types.Vector3.Dot(forward_dir, diff);
+ double mag_obj = LSL_Types.Vector3.Mag(diff);
ang_obj = Math.Acos(dot / (mag_fwd * mag_obj));
}
catch
@@ -560,8 +559,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
double ang_obj = 0;
try
{
- Vector3 diff = toRegionPos - fromRegionPos;
- LSL_Types.Vector3 obj_dir = new LSL_Types.Vector3(diff.X, diff.Y, diff.Z);
+ LSL_Types.Vector3 obj_dir = new LSL_Types.Vector3(
+ toRegionPos - fromRegionPos);
double dot = LSL_Types.Vector3.Dot(forward_dir, obj_dir);
double mag_obj = LSL_Types.Vector3.Mag(obj_dir);
ang_obj = Math.Acos(dot / (mag_fwd * mag_obj));
diff --git a/OpenSim/Region/ScriptEngine/Shared/Helpers.cs b/OpenSim/Region/ScriptEngine/Shared/Helpers.cs
index 0108f44..5a58f73 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Helpers.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Helpers.cs
@@ -160,11 +160,11 @@ namespace OpenSim.Region.ScriptEngine.Shared
else
{
// Set the values from the touch data provided by the client
- touchST = new LSL_Types.Vector3(value.STCoord.X, value.STCoord.Y, value.STCoord.Z);
- touchUV = new LSL_Types.Vector3(value.UVCoord.X, value.UVCoord.Y, value.UVCoord.Z);
- touchNormal = new LSL_Types.Vector3(value.Normal.X, value.Normal.Y, value.Normal.Z);
- touchBinormal = new LSL_Types.Vector3(value.Binormal.X, value.Binormal.Y, value.Binormal.Z);
- touchPos = new LSL_Types.Vector3(value.Position.X, value.Position.Y, value.Position.Z);
+ touchST = new LSL_Types.Vector3(value.STCoord);
+ touchUV = new LSL_Types.Vector3(value.UVCoord);
+ touchNormal = new LSL_Types.Vector3(value.Normal);
+ touchBinormal = new LSL_Types.Vector3(value.Binormal);
+ touchPos = new LSL_Types.Vector3(value.Position);
touchFace = value.FaceIndex;
}
}
@@ -181,19 +181,13 @@ namespace OpenSim.Region.ScriptEngine.Shared
Name = presence.Firstname + " " + presence.Lastname;
Owner = Key;
- Position = new LSL_Types.Vector3(
- presence.AbsolutePosition.X,
- presence.AbsolutePosition.Y,
- presence.AbsolutePosition.Z);
+ Position = new LSL_Types.Vector3(presence.AbsolutePosition);
Rotation = new LSL_Types.Quaternion(
presence.Rotation.X,
presence.Rotation.Y,
presence.Rotation.Z,
presence.Rotation.W);
- Velocity = new LSL_Types.Vector3(
- presence.Velocity.X,
- presence.Velocity.Y,
- presence.Velocity.Z);
+ Velocity = new LSL_Types.Vector3(presence.Velocity);
if (presence.PresenceType != PresenceType.Npc)
{
@@ -241,16 +235,12 @@ namespace OpenSim.Region.ScriptEngine.Shared
}
}
- Position = new LSL_Types.Vector3(part.AbsolutePosition.X,
- part.AbsolutePosition.Y,
- part.AbsolutePosition.Z);
+ Position = new LSL_Types.Vector3(part.AbsolutePosition);
Quaternion wr = part.ParentGroup.GroupRotation;
Rotation = new LSL_Types.Quaternion(wr.X, wr.Y, wr.Z, wr.W);
- Velocity = new LSL_Types.Vector3(part.Velocity.X,
- part.Velocity.Y,
- part.Velocity.Z);
+ Velocity = new LSL_Types.Vector3(part.Velocity);
}
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
index 562433d..d18efe0 100644
--- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
@@ -31,6 +31,11 @@ using System.Globalization;
using System.Text.RegularExpressions;
using OpenSim.Framework;
+using OpenMetaverse;
+using OMV_Vector3 = OpenMetaverse.Vector3;
+using OMV_Vector3d = OpenMetaverse.Vector3d;
+using OMV_Quaternion = OpenMetaverse.Quaternion;
+
namespace OpenSim.Region.ScriptEngine.Shared
{
[Serializable]
@@ -54,6 +59,20 @@ namespace OpenSim.Region.ScriptEngine.Shared
z = (float)vector.z;
}
+ public Vector3(OMV_Vector3 vector)
+ {
+ x = vector.X;
+ y = vector.Y;
+ z = vector.Z;
+ }
+
+ public Vector3(OMV_Vector3d vector)
+ {
+ x = vector.X;
+ y = vector.Y;
+ z = vector.Z;
+ }
+
public Vector3(double X, double Y, double Z)
{
x = X;
@@ -109,6 +128,26 @@ namespace OpenSim.Region.ScriptEngine.Shared
return new list(new object[] { vec });
}
+ public static implicit operator OMV_Vector3(Vector3 vec)
+ {
+ return new OMV_Vector3((float)vec.x, (float)vec.y, (float)vec.z);
+ }
+
+ public static implicit operator Vector3(OMV_Vector3 vec)
+ {
+ return new Vector3(vec);
+ }
+
+ public static implicit operator OMV_Vector3d(Vector3 vec)
+ {
+ return new OMV_Vector3d(vec.x, vec.y, vec.z);
+ }
+
+ public static implicit operator Vector3(OMV_Vector3d vec)
+ {
+ return new Vector3(vec);
+ }
+
public static bool operator ==(Vector3 lhs, Vector3 rhs)
{
return (lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z);
diff --git a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
index 5c4174e..a1ad07d 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
@@ -152,9 +152,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
det[0] = new DetectParams();
det[0].Key = remoteClient.AgentId;
det[0].Populate(myScriptEngine.World);
- det[0].OffsetPos = new LSL_Types.Vector3(offsetPos.X,
- offsetPos.Y,
- offsetPos.Z);
+ det[0].OffsetPos = offsetPos;
if (originalID == 0)
{
@@ -298,9 +296,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
foreach (DetectedObject detobj in col.Colliders)
{
DetectParams d = new DetectParams();
- d.Position = new LSL_Types.Vector3(detobj.posVector.X,
- detobj.posVector.Y,
- detobj.posVector.Z);
+ d.Position = detobj.posVector;
d.Populate(myScriptEngine.World);
det.Add(d);
myScriptEngine.PostObjectEvent(localID, new EventParams(
@@ -318,9 +314,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
foreach (DetectedObject detobj in col.Colliders)
{
DetectParams d = new DetectParams();
- d.Position = new LSL_Types.Vector3(detobj.posVector.X,
- detobj.posVector.Y,
- detobj.posVector.Z);
+ d.Position = detobj.posVector;
d.Populate(myScriptEngine.World);
det.Add(d);
myScriptEngine.PostObjectEvent(localID, new EventParams(
@@ -337,9 +331,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
foreach (DetectedObject detobj in col.Colliders)
{
DetectParams d = new DetectParams();
- d.Position = new LSL_Types.Vector3(detobj.posVector.X,
- detobj.posVector.Y,
- detobj.posVector.Z);
+ d.Position = detobj.posVector;
d.Populate(myScriptEngine.World);
det.Add(d);
myScriptEngine.PostObjectEvent(localID, new EventParams(
@@ -381,8 +373,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
myScriptEngine.PostObjectEvent(localID, new EventParams(
"at_target", new object[] {
new LSL_Types.LSLInteger(handle),
- new LSL_Types.Vector3(targetpos.X,targetpos.Y,targetpos.Z),
- new LSL_Types.Vector3(atpos.X,atpos.Y,atpos.Z) },
+ new LSL_Types.Vector3(targetpos),
+ new LSL_Types.Vector3(atpos) },
new DetectParams[0]));
}
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 1571fb4..a05650a 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -1467,7 +1467,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
else if (p[i] is string)
lsl_p[i] = new LSL_Types.LSLString((string)p[i]);
else if (p[i] is Vector3)
- lsl_p[i] = new LSL_Types.Vector3(((Vector3)p[i]).X, ((Vector3)p[i]).Y, ((Vector3)p[i]).Z);
+ lsl_p[i] = new LSL_Types.Vector3((Vector3)p[i]);
else if (p[i] is Quaternion)
lsl_p[i] = new LSL_Types.Quaternion(((Quaternion)p[i]).X, ((Quaternion)p[i]).Y, ((Quaternion)p[i]).Z, ((Quaternion)p[i]).W);
else if (p[i] is float)
@@ -1493,7 +1493,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
else if (p[i] is string)
lsl_p[i] = new LSL_Types.LSLString((string)p[i]);
else if (p[i] is Vector3)
- lsl_p[i] = new LSL_Types.Vector3(((Vector3)p[i]).X, ((Vector3)p[i]).Y, ((Vector3)p[i]).Z);
+ lsl_p[i] = new LSL_Types.Vector3((Vector3)p[i]);
else if (p[i] is Quaternion)
lsl_p[i] = new LSL_Types.Quaternion(((Quaternion)p[i]).X, ((Quaternion)p[i]).Y, ((Quaternion)p[i]).Z, ((Quaternion)p[i]).W);
else if (p[i] is float)
--
1.7.11.msysgit.0
LSL_Type_tweaks-Quaternion.patch [^] (18,692 bytes) 2012-08-18 14:30 [Show Content] [Hide Content]From 74bd0b2e8fc1270e4e606d3d25d0c588645c32ec Mon Sep 17 00:00:00 2001
From: SignpostMarv <github@signpostmarv.name>
Date: Sat, 18 Aug 2012 14:49:10 +0100
Subject: [PATCH 1/6] Implementing operators & constructors for Quaternion
---
OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
index d18efe0..bdc7d70 100644
--- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
@@ -361,6 +361,14 @@ namespace OpenSim.Region.ScriptEngine.Shared
s = 1;
}
+ public Quaternion(OMV_Quaternion rot)
+ {
+ x = rot.X;
+ y = rot.Y;
+ z = rot.Z;
+ s = rot.W;
+ }
+
#endregion
#region Overriders
@@ -407,6 +415,16 @@ namespace OpenSim.Region.ScriptEngine.Shared
return new list(new object[] { r });
}
+ public static implicit operator OMV_Quaternion(Quaternion rot)
+ {
+ return new OMV_Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s);
+ }
+
+ public static implicit operator Quaternion(OMV_Quaternion rot)
+ {
+ return new Quaternion(rot);
+ }
+
public static bool operator ==(Quaternion lhs, Quaternion rhs)
{
// Return true if the fields match:
--
1.7.11.msysgit.0
From d28598ca782de7ec591d1d2893c3f57b0908db2c Mon Sep 17 00:00:00 2001
From: SignpostMarv <github@signpostmarv.name>
Date: Sat, 18 Aug 2012 14:54:13 +0100
Subject: [PATCH 2/6] adding missing refactor for LSL_Vector
---
OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 7671e54..4d542d5 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -10536,7 +10536,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
break;
case ScriptBaseClass.OBJECT_VELOCITY:
- ret.Add(new LSL_Vector(obj.Velocity.X, obj.Velocity.Y, obj.Velocity.Z));
+ ret.Add(new LSL_Vector(obj.Velocity));
break;
case ScriptBaseClass.OBJECT_OWNER:
ret.Add(new LSL_String(obj.OwnerID.ToString()));
--
1.7.11.msysgit.0
From 2e1d9c5f50bbc2954c742500b2f6196a1e1bf946 Mon Sep 17 00:00:00 2001
From: SignpostMarv <github@signpostmarv.name>
Date: Sat, 18 Aug 2012 15:04:07 +0100
Subject: [PATCH 3/6] implicit operators mean one does not need to instantiate
new objects manually
---
OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 5 ++---
OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs | 7 +++----
2 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 4d542d5..87298e3 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2231,8 +2231,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public LSL_Integer llRotTarget(LSL_Rotation rot, double error)
{
m_host.AddScriptLPS(1);
- return m_host.ParentGroup.registerRotTargetWaypoint(
- new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s), (float)error);
+ return m_host.ParentGroup.registerRotTargetWaypoint(rot, (float)error);
}
public void llRotTargetRemove(int number)
@@ -10531,7 +10530,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
else
rot = obj.GetWorldRotation();
- LSL_Rotation objrot = new LSL_Rotation(rot.X, rot.Y, rot.Z, rot.W);
+ LSL_Rotation objrot = new LSL_Rotation(rot);
ret.Add(objrot);
}
break;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
index 929948b..84cf6ca 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/MOD_Api.cs
@@ -333,8 +333,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{
if (type == typeof(OpenMetaverse.Quaternion))
{
- LSL_Rotation rot = (LSL_Rotation)lslparm;
- return new OpenMetaverse.Quaternion((float)rot.x,(float)rot.y,(float)rot.z,(float)rot.s);
+ return (OpenMetaverse.Quaternion)((LSL_Rotation)lslparm);
}
}
@@ -366,8 +365,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
result[i] = new UUID((LSL_Key)plist[i]);
else if (plist[i] is LSL_Rotation)
{
- LSL_Rotation rot = (LSL_Rotation)plist[i];
- result[i] = new OpenMetaverse.Quaternion((float)rot.x,(float)rot.y,(float)rot.z,(float)rot.s);
+ result[i] = (OpenMetaverse.Quaternion)(
+ (LSL_Rotation)plist[i]);
}
else if (plist[i] is LSL_Vector)
{
--
1.7.11.msysgit.0
From 0ac30967a2ec3a6a1b81589fe5cf01a4db194fd4 Mon Sep 17 00:00:00 2001
From: SignpostMarv <github@signpostmarv.name>
Date: Sat, 18 Aug 2012 15:10:44 +0100
Subject: [PATCH 4/6] constructor means not having to manually refer to
individual properties
---
.../ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs | 4 ++--
OpenSim/Region/ScriptEngine/XEngine/EventManager.cs | 4 ++--
OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
index 7162226..24cceea 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
@@ -351,7 +351,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
q = avatar.Rotation * q;
}
- LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W);
+ LSL_Types.Quaternion r = new LSL_Types.Quaternion(q);
LSL_Types.Vector3 forward_dir = (new LSL_Types.Vector3(1, 0, 0) * r);
double mag_fwd = LSL_Types.Vector3.Mag(forward_dir);
@@ -478,7 +478,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
q = avatar.Rotation * q;
}
- LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W);
+ LSL_Types.Quaternion r = new LSL_Types.Quaternion(q);
LSL_Types.Vector3 forward_dir = (new LSL_Types.Vector3(1, 0, 0) * r);
double mag_fwd = LSL_Types.Vector3.Mag(forward_dir);
bool attached = (SensePoint.ParentGroup.AttachmentPoint != 0);
diff --git a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
index a1ad07d..cee10df 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
@@ -391,8 +391,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
myScriptEngine.PostObjectEvent(localID, new EventParams(
"at_rot_target", new object[] {
new LSL_Types.LSLInteger(handle),
- new LSL_Types.Quaternion(targetrot.X,targetrot.Y,targetrot.Z,targetrot.W),
- new LSL_Types.Quaternion(atrot.X,atrot.Y,atrot.Z,atrot.W) },
+ new LSL_Types.Quaternion(targetrot),
+ new LSL_Types.Quaternion(atrot) },
new DetectParams[0]));
}
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index a05650a..53f899a 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -1469,7 +1469,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
else if (p[i] is Vector3)
lsl_p[i] = new LSL_Types.Vector3((Vector3)p[i]);
else if (p[i] is Quaternion)
- lsl_p[i] = new LSL_Types.Quaternion(((Quaternion)p[i]).X, ((Quaternion)p[i]).Y, ((Quaternion)p[i]).Z, ((Quaternion)p[i]).W);
+ lsl_p[i] = new LSL_Types.Quaternion((Quaternion)p[i]);
else if (p[i] is float)
lsl_p[i] = new LSL_Types.LSLFloat((float)p[i]);
else
@@ -1495,7 +1495,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
else if (p[i] is Vector3)
lsl_p[i] = new LSL_Types.Vector3((Vector3)p[i]);
else if (p[i] is Quaternion)
- lsl_p[i] = new LSL_Types.Quaternion(((Quaternion)p[i]).X, ((Quaternion)p[i]).Y, ((Quaternion)p[i]).Z, ((Quaternion)p[i]).W);
+ lsl_p[i] = new LSL_Types.Quaternion((Quaternion)p[i]);
else if (p[i] is float)
lsl_p[i] = new LSL_Types.LSLFloat((float)p[i]);
else
--
1.7.11.msysgit.0
From 2fd3c155d9cde9fa0e5db0dd2dfc46cc7be4b3e4 Mon Sep 17 00:00:00 2001
From: SignpostMarv <github@signpostmarv.name>
Date: Sat, 18 Aug 2012 15:18:31 +0100
Subject: [PATCH 5/6] Rot2Quaternion is now redundant
---
.../Shared/Api/Implementation/LSL_Api.cs | 21 ++++++++++-----------
.../Shared/Api/Implementation/OSSL_Api.cs | 2 +-
2 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 87298e3..7009548 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2094,7 +2094,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (m_host.ParentID == 0)
{
// special case: If we are root, rotate complete SOG to new rotation
- SetRot(m_host, Rot2Quaternion(rot));
+ SetRot(m_host, rot);
}
else
{
@@ -2102,7 +2102,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
SceneObjectPart rootPart = m_host.ParentGroup.RootPart;
if (rootPart != null) // better safe than sorry
{
- SetRot(m_host, rootPart.RotationOffset * Rot2Quaternion(rot));
+ SetRot(m_host, rootPart.RotationOffset * (Quaternion)rot);
}
}
@@ -2112,7 +2112,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llSetLocalRot(LSL_Rotation rot)
{
m_host.AddScriptLPS(1);
- SetRot(m_host, Rot2Quaternion(rot));
+ SetRot(m_host, rot);
ScriptSleep(200);
}
@@ -2828,7 +2828,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// need the magnitude later
// float velmag = (float)Util.GetMagnitude(llvel);
- SceneObjectGroup new_group = World.RezObject(m_host, item, pos, Rot2Quaternion(rot), vel, param);
+ SceneObjectGroup new_group = World.RezObject(m_host, item, pos, rot, vel, param);
// If either of these are null, then there was an unknown error.
if (new_group == null)
@@ -2897,7 +2897,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
else
{
- m_host.StartLookAt(Rot2Quaternion(rot), (float)strength, (float)damping);
+ m_host.StartLookAt(rot, (float)strength, (float)damping);
}
}
@@ -3292,7 +3292,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
else
{
- m_host.RotLookAt(Rot2Quaternion(target), (float)strength, (float)damping);
+ m_host.RotLookAt(target, (float)strength, (float)damping);
}
}
@@ -6506,7 +6506,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (!m_host.ParentGroup.IsDeleted)
{
- m_host.ParentGroup.RootPart.SetVehicleRotationParam(param, Rot2Quaternion(rot));
+ m_host.ParentGroup.RootPart.SetVehicleRotationParam(param, rot);
}
}
@@ -7316,13 +7316,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (part.ParentID == 0)
{
// special case: If we are root, rotate complete SOG to new rotation
- SetRot(part, Rot2Quaternion(q));
+ SetRot(part, q);
}
else
{
// we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask.
SceneObjectPart rootPart = part.ParentGroup.RootPart;
- SetRot(part, rootPart.RotationOffset * Rot2Quaternion(q));
+ SetRot(part, rootPart.RotationOffset * (Quaternion)q);
}
break;
@@ -7634,8 +7634,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
case (int)ScriptBaseClass.PRIM_ROT_LOCAL:
if (remain < 1)
return null;
- LSL_Rotation lr = rules.GetQuaternionItem(idx++);
- SetRot(part, Rot2Quaternion(lr));
+ SetRot(part, rules.GetQuaternionItem(idx++));
break;
case (int)ScriptBaseClass.PRIM_OMEGA:
if (remain < 3)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index eff1598..8936cb2 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -2533,7 +2533,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
ScenePresence sp = World.GetScenePresence(npcId);
if (sp != null)
- sp.Rotation = LSL_Api.Rot2Quaternion(rotation);
+ sp.Rotation = rotation;
}
}
--
1.7.11.msysgit.0
From 60e28ca7693c4e8f27737232a849fba88ee32e4a Mon Sep 17 00:00:00 2001
From: SignpostMarv <github@signpostmarv.name>
Date: Sat, 18 Aug 2012 15:19:15 +0100
Subject: [PATCH 6/6] integrating redundant code into operator
---
.../ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 14 +-------------
OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | 7 ++++++-
2 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 7009548..4645e7a 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -330,14 +330,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return key;
}
- // convert a LSL_Rotation to a Quaternion
- public static Quaternion Rot2Quaternion(LSL_Rotation r)
- {
- Quaternion q = new Quaternion((float)r.x, (float)r.y, (float)r.z, (float)r.s);
- q.Normalize();
- return q;
- }
-
//These are the implementations of the various ll-functions used by the LSL scripts.
public LSL_Float llSin(double f)
{
@@ -6532,12 +6524,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
protected void SitTarget(SceneObjectPart part, LSL_Vector offset, LSL_Rotation rot)
{
- // LSL quaternions can normalize to 0, normal Quaternions can't.
- if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0)
- rot.z = 1; // ZERO_ROTATION = 0,0,0,1
-
part.SitTargetPosition = offset;
- part.SitTargetOrientation = Rot2Quaternion(rot);
+ part.SitTargetOrientation = rot;
part.ParentGroup.HasGroupChanged = true;
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
index bdc7d70..9d9df9c 100644
--- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
@@ -417,7 +417,12 @@ namespace OpenSim.Region.ScriptEngine.Shared
public static implicit operator OMV_Quaternion(Quaternion rot)
{
- return new OMV_Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s);
+ // LSL quaternions can normalize to 0, normal Quaternions can't.
+ if (rot.s == 0 && rot.x == 0 && rot.y == 0 && rot.z == 0)
+ rot.z = 1; // ZERO_ROTATION = 0,0,0,1
+ OMV_Quaternion omvrot = new OMV_Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s);
+ omvrot.Normalize();
+ return omvrot;
}
public static implicit operator Quaternion(OMV_Quaternion rot)
--
1.7.11.msysgit.0
|