Renamed SOP and SOPInventory as SOPBase and SOPInventoryBase, and define new SOP and SOPInventory. The latters

will invoke UpdateBucketSyncInfo the set functions of their properties, while the base classes won't.
dsg
Huaiyu (Kitty) Liu 2011-02-09 17:17:16 -08:00
parent a9ebb3ebae
commit 3cd1ec8752
9 changed files with 334 additions and 1039 deletions

View File

@ -211,7 +211,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
PupolatePropertyBuketMapByDefault();
//Pass the bucket information to SceneObjectPart.
SceneObjectPart.InitializeBucketInfo(m_primPropertyBucketMap, m_propertyBucketDescription, m_actorID);
SceneObjectPart.InitializePropertyBucketInfo(m_primPropertyBucketMap, m_propertyBucketDescription, m_actorID);
}

View File

@ -34,7 +34,8 @@ namespace OpenSim.Region.Framework.Interfaces
{
void Reset();
void Close();
void QueuePartForUpdate(SceneObjectPart part);
//void QueuePartForUpdate(SceneObjectPart part);
void QueuePartForUpdate(SceneObjectPartBase part);
void SendPrimUpdates();
}
}

View File

@ -2148,8 +2148,15 @@ namespace OpenSim.Region.Framework.Scenes
//SYMMETRIC SYNC: need to copy value w/o trigger UpdateBucketSyncInfo
//child.RootPart.ObjectSaleType = 0;
//child.RootPart.SalePrice = 10;
child.RootPart.SetObjectSaleType(0);
child.RootPart.SetSalePrice(10);
//child.RootPart.SetObjectSaleType(0);
//child.RootPart.SetSalePrice(10);
//child.RootPart.SetProperty("ObjectSaleType", 0);
//child.RootPart.SetProperty("SalePrice", 10);
//casting SOP to SOPBase to make sure we call SOPBase.Property set function, not the SOP.Property set function
SceneObjectPartBase rootPart = (SceneObjectPartBase)child.RootPart;
rootPart.ObjectSaleType = 0;
rootPart.SalePrice = 10;
childGroups.Add(child);
}
}

View File

@ -294,11 +294,12 @@ namespace OpenSim.Region.Framework.Scenes
get { return m_rootPart.GroupPosition; }
set
{
/*
SetAbsolutePosition(value);
SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++)
parts[i].UpdateBucketSyncInfo("GroupPosition");
/*
*/
Vector3 val = value;
//REGION SYNC touched
@ -333,7 +334,7 @@ namespace OpenSim.Region.Framework.Scenes
//m_rootPart.GroupPosition.Z);
//m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor);
//}
* */
}
}
public void SetAbsolutePosition(Vector3 value)
@ -364,8 +365,8 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++)
{
//parts[i].GroupPosition = val;
parts[i].SetGroupPosition(val);
parts[i].GroupPosition = val;
//parts[i].SetGroupPosition(val);
}
}
@ -3749,12 +3750,13 @@ namespace OpenSim.Region.Framework.Scenes
//!!!!!!!!!!!!!!!!!!NOTE!!!!!!!!!!!!!!!
//All SOP properties below is set through calling SetXXX(value) instead of by "XXX=value", as such a value is being changed due to sync (
//i.e. triggered by remote operation instead of by local operation
public SceneObjectGroup DelinkFromGroupBySync(SceneObjectPart linkPart, bool sendEvents)
public SceneObjectGroup DelinkFromGroupBySync(SceneObjectPart delinkPart, bool sendEvents)
{
// m_log.DebugFormat(
// "[SCENE OBJECT GROUP]: Delinking part {0}, {1} from group with root part {2}, {3}",
// linkPart.Name, linkPart.UUID, RootPart.Name, RootPart.UUID);
SceneObjectPartBase linkPart = (SceneObjectPartBase)delinkPart;
linkPart.ClearUndoState();
Quaternion worldRot = linkPart.GetWorldRotation();
@ -3770,27 +3772,27 @@ namespace OpenSim.Region.Framework.Scenes
{
// Single prim left
//RootPart.LinkNum = 0;
RootPart.SetLinkNum(0);
//RootPart.SetProperty("LinkNum", 0);
((SceneObjectPartBase)RootPart).LinkNum = 0;
}
else
{
for (int i = 0; i < parts.Length; i++)
{
SceneObjectPart part = parts[i];
SceneObjectPartBase part = (SceneObjectPartBase)parts[i];
if (part.LinkNum > linkPart.LinkNum)
{
//part.LinkNum--;
int linkNum = part.LinkNum - 1;
part.SetLinkNum(linkNum);
part.LinkNum--;
//int linkNum = part.LinkNum - 1;
//part.SetProperty("LinkNum", linkNum);
}
}
}
}
//linkPart.ParentID = 0;
//linkPart.LinkNum = 0;
linkPart.SetParentID(0);
linkPart.SetLinkNum(0);
linkPart.ParentID = 0; //ParentID is a value set only locally and ignored in synchronization, so no need to call SetProperty to set its value
linkPart.LinkNum = 0;
//linkPart.SetParentID(0);
if (linkPart.PhysActor != null)
{
@ -3804,19 +3806,23 @@ namespace OpenSim.Region.Framework.Scenes
Vector3 axPos = linkPart.OffsetPosition;
axPos *= parentRot;
//linkPart.OffsetPosition = new Vector3(axPos.X, axPos.Y, axPos.Z);
//linkPart.GroupPosition = AbsolutePosition + linkPart.OffsetPosition;
//linkPart.OffsetPosition = new Vector3(0, 0, 0);
//linkPart.RotationOffset = worldRot;
linkPart.OffsetPosition = new Vector3(axPos.X, axPos.Y, axPos.Z);
linkPart.GroupPosition = AbsolutePosition + linkPart.OffsetPosition;
linkPart.OffsetPosition = new Vector3(0, 0, 0);
linkPart.RotationOffset = worldRot;
linkPart.SetOffsetPosition(new Vector3(axPos.X, axPos.Y, axPos.Z));
linkPart.SetGroupPosition(AbsolutePosition + linkPart.OffsetPosition);
linkPart.SetOffsetPosition(new Vector3(0, 0, 0));
linkPart.SetRotationOffset(worldRot);
//linkPart.SetOffsetPosition(new Vector3(axPos.X, axPos.Y, axPos.Z));
//linkPart.SetGroupPosition(AbsolutePosition + linkPart.OffsetPosition);
//linkPart.SetOffsetPosition(new Vector3(0, 0, 0));
//linkPart.SetRotationOffset(worldRot);
//linkPart.SetProperty("OffsetPosition", new Vector3(axPos.X, axPos.Y, axPos.Z));
//linkPart.SetProperty("GroupPosition", AbsolutePosition + linkPart.OffsetPosition);
//linkPart.SetProperty("OffsetPosition", new Vector3(0, 0, 0));
//linkPart.SetProperty("RotationOffset", worldRot);
//SceneObjectGroup objectGroup = new SceneObjectGroup(linkPart);
bool newGroupBySync = true;
SceneObjectGroup objectGroup = new SceneObjectGroup(linkPart, newGroupBySync);
SceneObjectGroup objectGroup = new SceneObjectGroup(delinkPart, newGroupBySync);
m_scene.AddNewSceneObjectBySync(objectGroup, true);
@ -3833,7 +3839,7 @@ namespace OpenSim.Region.Framework.Scenes
}
/// <summary>
/// Set a part to act as the root part for this scene object, in which SetLinkNum() is called instead of "LinkNum=".
/// Set a part to act as the root part for this scene object, in which SetProperty("LinkNum",) is called instead of "LinkNum=".
/// </summary>
/// <param name="part"></param>
public void SetRootPartBySync(SceneObjectPart part)
@ -3845,7 +3851,7 @@ namespace OpenSim.Region.Framework.Scenes
m_rootPart = part;
if (!IsAttachment)
part.ParentID = 0;
part.SetLinkNum(0);
part.SetProperty("LinkNum", 0);
m_parts.Add(m_rootPart.UUID, m_rootPart);
}
@ -3872,36 +3878,40 @@ namespace OpenSim.Region.Framework.Scenes
public void LinkToGroupBySync(SceneObjectGroup objectGroup)
{
SceneObjectPart linkPart = objectGroup.m_rootPart;
SceneObjectPartBase linkPart = (SceneObjectPartBase)objectGroup.m_rootPart;
Vector3 oldGroupPosition = linkPart.GroupPosition;
Quaternion oldRootRotation = linkPart.RotationOffset;
//linkPart.OffsetPosition = linkPart.GroupPosition - AbsolutePosition;
//linkPart.GroupPosition = AbsolutePosition;
linkPart.SetOffsetPosition(linkPart.GroupPosition - AbsolutePosition);
linkPart.SetGroupPosition(AbsolutePosition);
linkPart.OffsetPosition = linkPart.GroupPosition - AbsolutePosition;
linkPart.GroupPosition = AbsolutePosition;
//linkPart.SetOffsetPosition(linkPart.GroupPosition - AbsolutePosition);
//linkPart.SetGroupPosition(AbsolutePosition);
//linkPart.SetProperty("OffsetPosition", linkPart.GroupPosition - AbsolutePosition);
//linkPart.SetProperty("GroupPosition", AbsolutePosition);
Vector3 axPos = linkPart.OffsetPosition;
Quaternion parentRot = m_rootPart.RotationOffset;
axPos *= Quaternion.Inverse(parentRot);
//linkPart.OffsetPosition = axPos;
linkPart.SetOffsetPosition(axPos);
linkPart.OffsetPosition = axPos;
//linkPart.SetOffsetPosition(axPos);
//linkPart.SetProperty("OffsetPosition", axPos);
Quaternion oldRot = linkPart.RotationOffset;
Quaternion newRot = Quaternion.Inverse(parentRot) * oldRot;
//linkPart.RotationOffset = newRot;
linkPart.SetRotationOffset(newRot);
linkPart.RotationOffset = newRot;
//linkPart.SetRotationOffset(newRot);
//linkPart.SetProperty("RotationOffset", newRot);
//ParentID is only valid locally, so remote value is ignored and no syncinfo will be modified
linkPart.ParentID = m_rootPart.LocalId;
if (m_rootPart.LinkNum == 0)
//m_rootPart.LinkNum = 1;
m_rootPart.SetLinkNum(1);
((SceneObjectPartBase)m_rootPart).LinkNum = 1;
//m_rootPart.SetProperty("LinkNum",1);
lock (m_parts.SyncRoot)
{
m_parts.Add(linkPart.UUID, linkPart);
m_parts.Add(linkPart.UUID, (SceneObjectPart) linkPart);
// Insert in terms of link numbers, the new links
// before the current ones (with the exception of
@ -3909,17 +3919,17 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++)
{
SceneObjectPart part = parts[i];
SceneObjectPartBase part = (SceneObjectPartBase)parts[i];
if (part.LinkNum != 1)
{
// Don't update root prim link number
//part.LinkNum += objectGroup.PrimCount;
part.SetLinkNum(objectGroup.PrimCount);
part.LinkNum += objectGroup.PrimCount;
//part.SetProperty("LinkNum",objectGroup.PrimCount);
}
}
//linkPart.LinkNum = 2;
linkPart.SetLinkNum(2);
linkPart.LinkNum = 2;
//linkPart.SetProperty("LinkNum",2);
linkPart.SetParent(this);
linkPart.CreateSelected = true;
@ -3963,49 +3973,57 @@ namespace OpenSim.Region.Framework.Scenes
}
private void LinkNonRootPartBySync(SceneObjectPart part, Vector3 oldGroupPosition, Quaternion oldGroupRotation, int linkNum)
private void LinkNonRootPartBySync(SceneObjectPart linkPart, Vector3 oldGroupPosition, Quaternion oldGroupRotation, int linkNum)
{
Quaternion parentRot = oldGroupRotation;
Quaternion oldRot = part.RotationOffset;
Quaternion oldRot = linkPart.RotationOffset;
Quaternion worldRot = parentRot * oldRot;
parentRot = oldGroupRotation;
Vector3 axPos = part.OffsetPosition;
Vector3 axPos = linkPart.OffsetPosition;
SceneObjectPartBase part = (SceneObjectPartBase)linkPart;
axPos *= parentRot;
//part.OffsetPosition = axPos;
//part.GroupPosition = oldGroupPosition + part.OffsetPosition;
//part.OffsetPosition = Vector3.Zero;
//part.RotationOffset = worldRot;
part.SetOffsetPosition(axPos);
part.SetGroupPosition(oldGroupPosition + part.OffsetPosition);
part.SetOffsetPosition(Vector3.Zero);
part.SetRotationOffset(worldRot);
part.OffsetPosition = axPos;
part.GroupPosition = oldGroupPosition + part.OffsetPosition;
part.OffsetPosition = Vector3.Zero;
part.RotationOffset = worldRot;
//part.SetOffsetPosition(axPos);
//part.SetGroupPosition(oldGroupPosition + part.OffsetPosition);
//part.SetOffsetPosition(Vector3.Zero);
//part.SetRotationOffset(worldRot);
//part.SetProperty("OffsetPosition", axPos);
//part.SetProperty("GroupPosition", oldGroupPosition + part.OffsetPosition);
//part.SetProperty("OffsetPosition", Vector3.Zero);
//part.SetProperty("RotationOffset", worldRot);
part.SetParent(this);
part.ParentID = m_rootPart.LocalId;
m_parts.Add(part.UUID, part);
m_parts.Add(part.UUID, linkPart);
//part.LinkNum = linkNum;
part.SetLinkNum(linkNum);
part.LinkNum = linkNum;
//part.SetProperty("LinkNum",linkNum);
//part.OffsetPosition = part.GroupPosition - AbsolutePosition;
part.SetOffsetPosition(part.GroupPosition - AbsolutePosition);
part.OffsetPosition = part.GroupPosition - AbsolutePosition;
//part.SetOffsetPosition(part.GroupPosition - AbsolutePosition);
//part.SetProperty("OffsetPosition", part.GroupPosition - AbsolutePosition);
Quaternion rootRotation = m_rootPart.RotationOffset;
Vector3 pos = part.OffsetPosition;
pos *= Quaternion.Inverse(rootRotation);
//part.OffsetPosition = pos;
part.SetOffsetPosition(pos);
part.OffsetPosition = pos;
//part.SetOffsetPosition(pos);
//part.SetProperty("OffsetPosition", pos);
parentRot = m_rootPart.RotationOffset;
oldRot = part.RotationOffset;
Quaternion newRot = Quaternion.Inverse(parentRot) * oldRot;
//part.RotationOffset = newRot;
part.SetRotationOffset(newRot);
part.RotationOffset = newRot;
//part.SetRotationOffset(newRot);
//part.SetProperty("RotationOffset", newRot);
}

File diff suppressed because it is too large Load Diff

View File

@ -41,7 +41,8 @@ using OpenSim.Region.Framework.Scenes.Serialization;
namespace OpenSim.Region.Framework.Scenes
{
public class SceneObjectPartInventory : IEntityInventory
//public class SceneObjectPartInventory : IEntityInventory
public class SceneObjectPartInventoryBase : IEntityInventory
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@ -52,7 +53,8 @@ namespace OpenSim.Region.Framework.Scenes
/// <value>
/// The part to which the inventory belongs.
/// </value>
private SceneObjectPart m_part;
//private SceneObjectPart m_part;
private SceneObjectPartBase m_part;
/// <summary>
/// Serial count for inventory file , used to tell if inventory has changed
@ -76,19 +78,7 @@ namespace OpenSim.Region.Framework.Scenes
protected internal uint Serial
{
get { return m_inventorySerial; }
set
{
SetSerial(value);
m_part.UpdateBucketSyncInfo("InventorySerial");
//m_inventorySerial = value;
}
}
//SYMMETRIC SYNC
public void SetSerial(uint value)
{
m_inventorySerial = value;
set { m_inventorySerial = value; }
}
/// <value>
@ -98,21 +88,10 @@ namespace OpenSim.Region.Framework.Scenes
{
get { return m_items; }
set
{
SetItems(value);
m_inventorySerial++;
m_part.UpdateBucketSyncInfo("TaskInventory");
m_part.UpdateBucketSyncInfo("InventorySerial");
//m_items = value;
//m_inventorySerial++;
}
}
//SYMMETRIC SYNC
//This is inparticular for updating properties
public void SetItems(TaskInventoryDictionary value)
{
m_items = value;
//m_inventorySerial++;
m_inventorySerial++;
}
}
/// <summary>
@ -121,7 +100,8 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="part">
/// A <see cref="SceneObjectPart"/>
/// </param>
public SceneObjectPartInventory(SceneObjectPart part)
//public SceneObjectPartInventory(SceneObjectPart part)
public SceneObjectPartInventoryBase(SceneObjectPartBase part)
{
m_part = part;
}
@ -159,10 +139,6 @@ namespace OpenSim.Region.Framework.Scenes
item.ResetIDs(m_part.UUID);
m_items.Add(item.ItemID, item);
}
//SYMMETRIC SYNC
//No need to trigger UpdateBucketSyncInfo, as callers eventually will call SOG.AttachToScene and init BucketSyncInfo
}
}
@ -179,9 +155,6 @@ namespace OpenSim.Region.Framework.Scenes
item.ParentID = m_part.UUID;
Items.Add(item.ItemID, item);
}
//SYMMETRIC SYNC
//No need to trigger UpdateBucketSyncInfo, this is called only when SOP.UUID is written, which is assumed not to change after being created.
}
}
@ -212,9 +185,6 @@ namespace OpenSim.Region.Framework.Scenes
item.PermsGranter = UUID.Zero;
}
}
//SYMMETRIC SYNC
m_part.UpdateBucketSyncInfo("TaskInventory");
}
/// <summary>
@ -246,12 +216,6 @@ namespace OpenSim.Region.Framework.Scenes
if (groupID != item.GroupID)
item.GroupID = groupID;
}
//SYMMETRIC SYNC: need to test if we need to take different actions when this is attachment or not
//if (!m_part.ParentGroup.RootPart.IsAttachment)
//{
m_part.UpdateBucketSyncInfo("TaskInventory");
}
/// <summary>
@ -582,11 +546,7 @@ namespace OpenSim.Region.Framework.Scenes
m_part.ParentGroup.HasGroupChanged = true;
//SYMMETRIC SYNC: add ScheduleFullUpdate to enable synchronization across actors
//m_part.ScheduleFullUpdate();
//SYMMETRIC SYNC
m_part.UpdateBucketSyncInfo("TaskInventory");
m_part.UpdateBucketSyncInfo("InventorySerial"); //m_inventorySerial is also changed,
m_part.ScheduleFullUpdate();
}
/// <summary>
@ -607,9 +567,6 @@ namespace OpenSim.Region.Framework.Scenes
}
m_inventorySerial++;
}
//SYMMETRIC SYNC: no UpdateBucketSyncInfo called here, since this function is called by loading objects from DB, and UpdateBucketSyncInfo
//will be called after all objects are loaded.
}
/// <summary>
@ -768,10 +725,6 @@ namespace OpenSim.Region.Framework.Scenes
HasInventoryChanged = true;
m_part.ParentGroup.HasGroupChanged = true;
}
//SYMMETRIC SYNC
m_part.UpdateBucketSyncInfo("TaskInventory");
m_part.UpdateBucketSyncInfo("InventorySerial");
return true;
}
else
@ -815,10 +768,6 @@ namespace OpenSim.Region.Framework.Scenes
m_part.ScheduleFullUpdate();
//SYMMETRIC SYNC
m_part.UpdateBucketSyncInfo("TaskInventory");
m_part.UpdateBucketSyncInfo("InventorySerial");
return type;
}
@ -1073,9 +1022,6 @@ namespace OpenSim.Region.Framework.Scenes
item.OwnerChanged = true;
item.PermsMask = 0;
item.PermsGranter = UUID.Zero;
//SYMMETRIC SYNC
m_part.UpdateBucketSyncInfo("TaskInventory");
}
}
}
@ -1092,10 +1038,6 @@ namespace OpenSim.Region.Framework.Scenes
}
m_inventorySerial++;
HasInventoryChanged = true;
//SYMMETRIC SYNC
m_part.UpdateBucketSyncInfo("TaskInventory");
m_part.UpdateBucketSyncInfo("InventorySerial");
}
public bool ContainsScripts()
@ -1233,4 +1175,25 @@ namespace OpenSim.Region.Framework.Scenes
}
#endregion REGION SYNC
}
#region SYMMETRIC SYNC
public class SceneObjectPartInventory : SceneObjectPartInventoryBase
{
private SceneObjectPart m_part;
public SceneObjectPartInventory(SceneObjectPart part):base((SceneObjectPartBase) part)
{
m_part = part;
}
new protected internal uint Serial
{
get { return base.Serial; }
set
{
base.Serial = value;
//m_part.UpdateBucketSyncInfo("InventorySerial");
}
}
}
#endregion
}

View File

@ -57,11 +57,12 @@ namespace OpenSim.Region.Framework.Scenes
/// Add the part to the queue of parts for which we need to send an update to the client
/// </summary>
/// <param name="part"></param>
public void QueuePartForUpdate(SceneObjectPart part)
//public void QueuePartForUpdate(SceneObjectPart part)
public void QueuePartForUpdate(SceneObjectPartBase part)
{
lock (m_partsUpdateQueue)
{
m_partsUpdateQueue.Enqueue(part);
m_partsUpdateQueue.Enqueue((SceneObjectPart)part);
}
}

View File

@ -423,8 +423,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
//That is, calling SetXXX(value) instead of using "XXX = value".
private static void ProcessAllowedDrop(SceneObjectPart obj, XmlTextReader reader)
{
//obj.AllowedDrop = Util.ReadBoolean(reader);
obj.SetAllowedDrop(Util.ReadBoolean(reader));
obj.AllowedDrop = Util.ReadBoolean(reader);
//obj.SetAllowedDrop(Util.ReadBoolean(reader));
}
private static void ProcessCreatorID(SceneObjectPart obj, XmlTextReader reader)
@ -489,32 +489,32 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
private static void ProcessGroupPosition(SceneObjectPart obj, XmlTextReader reader)
{
//obj.GroupPosition = Util.ReadVector(reader, "GroupPosition");
obj.SetGroupPosition(Util.ReadVector(reader, "GroupPosition"));
obj.GroupPosition = Util.ReadVector(reader, "GroupPosition");
//obj.SetGroupPosition(Util.ReadVector(reader, "GroupPosition"));
}
private static void ProcessOffsetPosition(SceneObjectPart obj, XmlTextReader reader)
{
//obj.OffsetPosition = Util.ReadVector(reader, "OffsetPosition"); ;
obj.SetOffsetPosition(Util.ReadVector(reader, "OffsetPosition"));
obj.OffsetPosition = Util.ReadVector(reader, "OffsetPosition"); ;
//obj.SetOffsetPosition(Util.ReadVector(reader, "OffsetPosition"));
}
private static void ProcessRotationOffset(SceneObjectPart obj, XmlTextReader reader)
{
//obj.RotationOffset = Util.ReadQuaternion(reader, "RotationOffset");
obj.SetRotationOffset(Util.ReadQuaternion(reader, "RotationOffset"));
obj.RotationOffset = Util.ReadQuaternion(reader, "RotationOffset");
//obj.SetRotationOffset(Util.ReadQuaternion(reader, "RotationOffset"));
}
private static void ProcessVelocity(SceneObjectPart obj, XmlTextReader reader)
{
//obj.Velocity = Util.ReadVector(reader, "Velocity");
obj.SetVelocity(Util.ReadVector(reader, "Velocity"));
obj.Velocity = Util.ReadVector(reader, "Velocity");
//obj.SetVelocity(Util.ReadVector(reader, "Velocity"));
}
private static void ProcessAngularVelocity(SceneObjectPart obj, XmlTextReader reader)
{
//obj.AngularVelocity = Util.ReadVector(reader, "AngularVelocity");
obj.SetVelocity(Util.ReadVector(reader, "AngularVelocity"));
obj.AngularVelocity = Util.ReadVector(reader, "AngularVelocity");
//obj.SetVelocity(Util.ReadVector(reader, "AngularVelocity"));
}
private static void ProcessAcceleration(SceneObjectPart obj, XmlTextReader reader)
@ -573,8 +573,8 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
private static void ProcessScale(SceneObjectPart obj, XmlTextReader reader)
{
//obj.Scale = Util.ReadVector(reader, "Scale");
obj.SetScale(Util.ReadVector(reader, "Scale"));
obj.Scale = Util.ReadVector(reader, "Scale");
//obj.SetScale(Util.ReadVector(reader, "Scale"));
}
private static void ProcessUpdateFlag(SceneObjectPart obj, XmlTextReader reader)