store kfm on inventory. this may still be a bit confusing on rez
parent
04b97be71e
commit
9ae26fc5af
|
@ -412,7 +412,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
Dictionary<UUID, Vector3> originalPositions = new Dictionary<UUID, Vector3>();
|
Dictionary<UUID, Vector3> originalPositions = new Dictionary<UUID, Vector3>();
|
||||||
Dictionary<UUID, Quaternion> originalRotations = new Dictionary<UUID, Quaternion>();
|
Dictionary<UUID, Quaternion> originalRotations = new Dictionary<UUID, Quaternion>();
|
||||||
// this possible is not needed if keyframes are saved
|
// this possible is not needed if keyframes are saved
|
||||||
Dictionary<UUID, KeyframeMotion> originalKeyframes = new Dictionary<UUID, KeyframeMotion>();
|
// Dictionary<UUID, KeyframeMotion> originalKeyframes = new Dictionary<UUID, KeyframeMotion>();
|
||||||
|
|
||||||
foreach (SceneObjectGroup objectGroup in objlist)
|
foreach (SceneObjectGroup objectGroup in objlist)
|
||||||
{
|
{
|
||||||
|
@ -423,8 +423,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
objectGroup.RootPart.SetForce(Vector3.Zero);
|
objectGroup.RootPart.SetForce(Vector3.Zero);
|
||||||
objectGroup.RootPart.SetAngularImpulse(Vector3.Zero, false);
|
objectGroup.RootPart.SetAngularImpulse(Vector3.Zero, false);
|
||||||
|
|
||||||
originalKeyframes[objectGroup.UUID] = objectGroup.RootPart.KeyframeMotion;
|
// originalKeyframes[objectGroup.UUID] = objectGroup.RootPart.KeyframeMotion;
|
||||||
objectGroup.RootPart.KeyframeMotion = null;
|
// objectGroup.RootPart.KeyframeMotion = null;
|
||||||
|
|
||||||
Vector3 inventoryStoredPosition = objectGroup.AbsolutePosition;
|
Vector3 inventoryStoredPosition = objectGroup.AbsolutePosition;
|
||||||
originalPositions[objectGroup.UUID] = inventoryStoredPosition;
|
originalPositions[objectGroup.UUID] = inventoryStoredPosition;
|
||||||
|
@ -476,7 +476,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
{
|
{
|
||||||
objectGroup.AbsolutePosition = originalPositions[objectGroup.UUID];
|
objectGroup.AbsolutePosition = originalPositions[objectGroup.UUID];
|
||||||
objectGroup.RootPart.RotationOffset = originalRotations[objectGroup.UUID];
|
objectGroup.RootPart.RotationOffset = originalRotations[objectGroup.UUID];
|
||||||
objectGroup.RootPart.KeyframeMotion = originalKeyframes[objectGroup.UUID];
|
// objectGroup.RootPart.KeyframeMotion = originalKeyframes[objectGroup.UUID];
|
||||||
if (objectGroup.RootPart.KeyframeMotion != null)
|
if (objectGroup.RootPart.KeyframeMotion != null)
|
||||||
objectGroup.RootPart.KeyframeMotion.Resume();
|
objectGroup.RootPart.KeyframeMotion.Resume();
|
||||||
}
|
}
|
||||||
|
@ -989,11 +989,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
// one full update during the attachment
|
// one full update during the attachment
|
||||||
// process causes some clients to fail to display the
|
// process causes some clients to fail to display the
|
||||||
// attachment properly.
|
// attachment properly.
|
||||||
m_Scene.AddNewSceneObject(group, true, false);
|
|
||||||
|
|
||||||
if (!attachment)
|
if (!attachment)
|
||||||
{
|
{
|
||||||
group.AbsolutePosition = pos + veclist[i];
|
group.AbsolutePosition = pos + veclist[i];
|
||||||
|
m_Scene.AddNewSceneObject(group, true, false);
|
||||||
|
|
||||||
// Fire on_rez
|
// Fire on_rez
|
||||||
group.CreateScriptInstances(0, true, m_Scene.DefaultScriptEngine, 1);
|
group.CreateScriptInstances(0, true, m_Scene.DefaultScriptEngine, 1);
|
||||||
|
@ -1001,6 +1001,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
|
|
||||||
group.ScheduleGroupForFullUpdate();
|
group.ScheduleGroupForFullUpdate();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
m_Scene.AddNewSceneObject(group, true, false);
|
||||||
|
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[INVENTORY ACCESS MODULE]: Rezzed {0} {1} {2} ownermask={3:X} nextownermask={4:X} groupmask={5:X} everyonemask={6:X} for {7}",
|
// "[INVENTORY ACCESS MODULE]: Rezzed {0} {1} {2} ownermask={3:X} nextownermask={4:X} groupmask={5:X} everyonemask={6:X} for {7}",
|
||||||
|
|
|
@ -755,7 +755,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool lastSteps = remainingSteps < 4;
|
// bool lastSteps = remainingSteps < 4;
|
||||||
|
|
||||||
Vector3 currentPosition = m_group.AbsolutePosition;
|
Vector3 currentPosition = m_group.AbsolutePosition;
|
||||||
Vector3 motionThisFrame = (Vector3)m_currentFrame.Position - currentPosition;
|
Vector3 motionThisFrame = (Vector3)m_currentFrame.Position - currentPosition;
|
||||||
motionThisFrame /= (float)remainingSteps;
|
motionThisFrame /= (float)remainingSteps;
|
||||||
|
@ -776,13 +777,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
m_group.AbsolutePosition = m_nextPosition;
|
m_group.AbsolutePosition = m_nextPosition;
|
||||||
if(lastSteps)
|
// if(lastSteps)
|
||||||
m_group.RootPart.Velocity = Vector3.Zero;
|
// m_group.RootPart.Velocity = Vector3.Zero;
|
||||||
else
|
// else
|
||||||
m_group.RootPart.Velocity = m_currentVel;
|
m_group.RootPart.Velocity = m_currentVel;
|
||||||
|
|
||||||
if(!update && (
|
if(!update && (
|
||||||
lastSteps ||
|
// lastSteps ||
|
||||||
m_skippedUpdates * tickDuration > 0.5 ||
|
m_skippedUpdates * tickDuration > 0.5 ||
|
||||||
Math.Abs(m_nextPosition.X - currentPosition.X) > 5f ||
|
Math.Abs(m_nextPosition.X - currentPosition.X) > 5f ||
|
||||||
Math.Abs(m_nextPosition.Y - currentPosition.Y) > 5f ||
|
Math.Abs(m_nextPosition.Y - currentPosition.Y) > 5f ||
|
||||||
|
|
|
@ -1651,10 +1651,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
physicsMS2 = (float)(tmpMS2 - tmpMS);
|
physicsMS2 = (float)(tmpMS2 - tmpMS);
|
||||||
tmpMS = tmpMS2;
|
tmpMS = tmpMS2;
|
||||||
|
|
||||||
|
/*
|
||||||
// Apply any pending avatar force input to the avatar's velocity
|
// Apply any pending avatar force input to the avatar's velocity
|
||||||
if (Frame % m_update_entitymovement == 0)
|
if (Frame % m_update_entitymovement == 0)
|
||||||
m_sceneGraph.UpdateScenePresenceMovement();
|
m_sceneGraph.UpdateScenePresenceMovement();
|
||||||
|
*/
|
||||||
if (Frame % (m_update_coarse_locations) == 0 && !m_sendingCoarseLocations)
|
if (Frame % (m_update_coarse_locations) == 0 && !m_sendingCoarseLocations)
|
||||||
{
|
{
|
||||||
m_sendingCoarseLocations = true;
|
m_sendingCoarseLocations = true;
|
||||||
|
|
|
@ -657,6 +657,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!m_scene.IsRunning)
|
||||||
|
return sog;
|
||||||
|
|
||||||
if (root.KeyframeMotion != null)
|
if (root.KeyframeMotion != null)
|
||||||
root.KeyframeMotion.StartCrossingCheck();
|
root.KeyframeMotion.StartCrossingCheck();
|
||||||
|
|
||||||
|
|
|
@ -112,9 +112,22 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
while (reader.ReadToNextSibling("Part"));
|
while (reader.ReadToNextSibling("Part"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reader.ReadEndElement();
|
||||||
|
|
||||||
|
if (reader.Name == "KeyframeMotion" && reader.NodeType == XmlNodeType.Element)
|
||||||
|
{
|
||||||
|
|
||||||
|
string innerkeytxt = reader.ReadElementContentAsString();
|
||||||
|
sceneObject.RootPart.KeyframeMotion =
|
||||||
|
KeyframeMotion.FromData(sceneObject, Convert.FromBase64String(innerkeytxt));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sceneObject.RootPart.KeyframeMotion = null;
|
||||||
|
|
||||||
// Script state may, or may not, exist. Not having any, is NOT
|
// Script state may, or may not, exist. Not having any, is NOT
|
||||||
// ever a problem.
|
// ever a problem.
|
||||||
sceneObject.LoadScriptState(reader);
|
sceneObject.LoadScriptState(reader);
|
||||||
|
|
||||||
sceneObject.InvalidateDeepEffectivePerms();
|
sceneObject.InvalidateDeepEffectivePerms();
|
||||||
return sceneObject;
|
return sceneObject;
|
||||||
}
|
}
|
||||||
|
@ -211,9 +224,19 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
|
|
||||||
writer.WriteEndElement(); // OtherParts
|
writer.WriteEndElement(); // OtherParts
|
||||||
|
|
||||||
|
if (sceneObject.RootPart.KeyframeMotion != null)
|
||||||
|
{
|
||||||
|
Byte[] data = sceneObject.RootPart.KeyframeMotion.Serialize();
|
||||||
|
|
||||||
|
writer.WriteStartElement(String.Empty, "KeyframeMotion", String.Empty);
|
||||||
|
writer.WriteBase64(data, 0, data.Length);
|
||||||
|
writer.WriteEndElement();
|
||||||
|
}
|
||||||
|
|
||||||
if (doScriptStates)
|
if (doScriptStates)
|
||||||
sceneObject.SaveScriptedState(writer);
|
sceneObject.SaveScriptedState(writer);
|
||||||
|
|
||||||
|
|
||||||
if (!noRootElement)
|
if (!noRootElement)
|
||||||
writer.WriteEndElement(); // SceneObjectGroup
|
writer.WriteEndElement(); // SceneObjectGroup
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue