* Adds KeyFrameMotion storage support to SQLite, just a note, seems that there's still something wrong with keyframed motion starting when the sim starts up, you have to 'select' and 'deselect' the prim again to get it to appear to move. Not sure what this is but maybe melanie_t can comment on this.

* Has a prim table migration..     that might take a while, hold on to your hats.
* Fixes a null-ref when shutting down while keyframed motion is active.
cpu-performance
teravus 2013-06-11 08:56:20 -05:00
parent ed950e6c74
commit d47a18fd09
3 changed files with 35 additions and 2 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

@ -779,7 +779,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)
{ {
@ -892,7 +893,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);
//} //}
} }