Merge branch 'master' into careminster

avinationmerge
Melanie 2013-06-11 21:01:58 +01:00
commit 400f876d98
5 changed files with 43 additions and 15 deletions

View File

@ -592,3 +592,11 @@ ALTER TABLE prims ADD COLUMN `Friction` double NOT NULL default '0.6';
ALTER TABLE prims ADD COLUMN `Restitution` double NOT NULL default '0.5'; ALTER TABLE prims ADD COLUMN `Restitution` double NOT NULL default '0.5';
COMMIT; COMMIT;
:VERSION 29 #---------------- Keyframes
BEGIN;
ALTER TABLE prims ADD COLUMN `KeyframeMotion` blob;
COMMIT;

View File

@ -732,6 +732,8 @@ namespace OpenSim.Data.SQLite
} }
SceneObjectGroup group = new SceneObjectGroup(prim); SceneObjectGroup group = new SceneObjectGroup(prim);
if (prim.KeyframeMotion != null)
prim.KeyframeMotion.UpdateSceneObject(group);
createdObjects.Add(group.UUID, group); createdObjects.Add(group.UUID, group);
retvals.Add(group); retvals.Add(group);
LoadItems(prim); LoadItems(prim);
@ -1241,6 +1243,7 @@ namespace OpenSim.Data.SQLite
createCol(prims, "Friction", typeof(Double)); createCol(prims, "Friction", typeof(Double));
createCol(prims, "Restitution", typeof(Double)); createCol(prims, "Restitution", typeof(Double));
createCol(prims, "KeyframeMotion", typeof(Byte[]));
// Add in contraints // Add in contraints
prims.PrimaryKey = new DataColumn[] { prims.Columns["UUID"] }; prims.PrimaryKey = new DataColumn[] { prims.Columns["UUID"] };
@ -1736,6 +1739,20 @@ namespace OpenSim.Data.SQLite
prim.Friction = Convert.ToSingle(row["Friction"]); prim.Friction = Convert.ToSingle(row["Friction"]);
prim.Restitution = Convert.ToSingle(row["Restitution"]); prim.Restitution = Convert.ToSingle(row["Restitution"]);
if (!(row["KeyframeMotion"] is DBNull))
{
Byte[] data = (byte[])row["KeyframeMotion"];
if (data.Length > 0)
prim.KeyframeMotion = KeyframeMotion.FromData(null, data);
else
prim.KeyframeMotion = null;
}
else
{
prim.KeyframeMotion = null;
}
return prim; return prim;
} }
@ -2168,6 +2185,13 @@ namespace OpenSim.Data.SQLite
row["GravityModifier"] = (double)prim.GravityModifier; row["GravityModifier"] = (double)prim.GravityModifier;
row["Friction"] = (double)prim.Friction; row["Friction"] = (double)prim.Friction;
row["Restitution"] = (double)prim.Restitution; row["Restitution"] = (double)prim.Restitution;
if (prim.KeyframeMotion != null)
row["KeyframeMotion"] = prim.KeyframeMotion.Serialize();
else
row["KeyframeMotion"] = new Byte[0];
} }
/// <summary> /// <summary>

View File

@ -822,7 +822,8 @@ namespace OpenSim.Region.Framework.Scenes
} }
// Tell the physics engines that this prim changed. // Tell the physics engines that this prim changed.
ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(actor); if (ParentGroup != null && ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene != null)
ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(actor);
} }
catch (Exception e) catch (Exception e)
{ {
@ -940,7 +941,7 @@ namespace OpenSim.Region.Framework.Scenes
//m_log.Info("[PART]: RO2:" + actor.Orientation.ToString()); //m_log.Info("[PART]: RO2:" + actor.Orientation.ToString());
} }
if (ParentGroup != null) if (ParentGroup != null && ParentGroup.Scene != null && ParentGroup.Scene.PhysicsScene != null)
ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(actor); ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(actor);
//} //}
} }

View File

@ -5136,6 +5136,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
else else
{ {
double invS = 1.0 / s; double invS = 1.0 / s;
if (rot.s < 0) invS = -invS;
return new LSL_Vector(rot.x * invS, rot.y * invS, rot.z * invS); return new LSL_Vector(rot.x * invS, rot.y * invS, rot.z * invS);
} }
} }
@ -5146,19 +5147,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
if (rot.s > 1) // normalization needed if (Math.Abs(rot.s) > 1) // normalization needed
{ rot.Normalize();
double length = Math.Sqrt(rot.x * rot.x + rot.y * rot.y +
rot.z * rot.z + rot.s * rot.s);
rot.x /= length;
rot.y /= length;
rot.z /= length;
rot.s /= length;
}
double angle = 2 * Math.Acos(rot.s); double angle = 2 * Math.Acos(rot.s);
if ((double.IsNaN(angle)) || double.IsInfinity(angle)) angle = 0; if (angle > Math.PI)
angle = 2 * Math.PI - angle;
return angle; return angle;
} }

View File

@ -377,10 +377,10 @@ namespace OpenSim.Region.ScriptEngine.Shared
double length = Math.Sqrt(x * x + y * y + z * z + s * s); double length = Math.Sqrt(x * x + y * y + z * z + s * s);
if (length < float.Epsilon) if (length < float.Epsilon)
{ {
x = 1; x = 0;
y = 0; y = 0;
z = 0; z = 0;
s = 0; s = 1;
} }
else else
{ {