Added implementation of GeneralBucketUpdateProcessor and PhysicsBucketUpdateProcessor
parent
f47c301a56
commit
63e35d53f7
|
@ -5324,16 +5324,115 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
private void GeneralBucketUpdateProcessor(SceneObjectPart updatedPart, string bucketName)
|
||||
{
|
||||
//If needed, we could define new set functions for these properties, and cast this SOP to SOPBase to
|
||||
//invoke the set functions in SOPBase
|
||||
//SceneObjectPartBase localPart = (SceneObjectPartBase)this;
|
||||
SceneObjectPart localPart = this;
|
||||
bool collisionSoundUpdated = false;
|
||||
|
||||
lock (m_bucketUpdateLocks[bucketName])
|
||||
{
|
||||
//See SceneObjectSerializer for the properties that are included in a serialized SceneObjectPart.
|
||||
localPart.AllowedDrop = updatedPart.AllowedDrop;
|
||||
localPart.CreatorID = updatedPart.CreatorID;
|
||||
localPart.CreatorData = updatedPart.CreatorData;
|
||||
localPart.FolderID = updatedPart.FolderID;
|
||||
localPart.InventorySerial = updatedPart.InventorySerial;
|
||||
localPart.TaskInventory = updatedPart.TaskInventory;
|
||||
//Following two properties, UUID and LocalId, shall not be updated.
|
||||
//localPart.UUID
|
||||
//localPart.LocalId
|
||||
localPart.Name = updatedPart.Name;
|
||||
localPart.Material = updatedPart.Material;
|
||||
localPart.PassTouches = updatedPart.PassTouches;
|
||||
//RegionHandle shall not be copied, since updatedSog is sent by a different actor, which has a different local region
|
||||
//localPart.RegionHandle
|
||||
localPart.ScriptAccessPin = updatedPart.ScriptAccessPin;
|
||||
|
||||
localPart.Description = updatedPart.Description;
|
||||
localPart.Color = updatedPart.Color;
|
||||
localPart.Text = updatedPart.Text;
|
||||
localPart.SitName = updatedPart.SitName;
|
||||
localPart.TouchName = updatedPart.TouchName;
|
||||
localPart.LinkNum = updatedPart.LinkNum;
|
||||
localPart.ClickAction = updatedPart.ClickAction;
|
||||
localPart.Shape = updatedPart.Shape;
|
||||
localPart.Scale = updatedPart.Scale;
|
||||
localPart.UpdateFlag = updatedPart.UpdateFlag;
|
||||
localPart.SitTargetOrientation = updatedPart.SitTargetOrientation;
|
||||
localPart.SitTargetPosition = updatedPart.SitTargetPosition;
|
||||
localPart.SitTargetPositionLL = updatedPart.SitTargetPositionLL;
|
||||
localPart.SitTargetOrientationLL = updatedPart.SitTargetOrientationLL;
|
||||
//ParentID should still point to the rootpart in the local sog, do not update. If the root part changed, we will update it in SceneObjectGroup.UpdateObjectProperties()
|
||||
//localPart.ParentID;
|
||||
localPart.CreationDate = updatedPart.CreationDate;
|
||||
localPart.Category = updatedPart.Category;
|
||||
localPart.SalePrice = updatedPart.SalePrice;
|
||||
localPart.ObjectSaleType = updatedPart.ObjectSaleType;
|
||||
localPart.OwnershipCost = updatedPart.OwnershipCost;
|
||||
localPart.GroupID = updatedPart.GroupID;
|
||||
localPart.OwnerID = updatedPart.OwnerID;
|
||||
localPart.LastOwnerID = updatedPart.LastOwnerID;
|
||||
localPart.BaseMask = updatedPart.BaseMask;
|
||||
localPart.OwnerMask = updatedPart.OwnerMask;
|
||||
localPart.GroupMask = updatedPart.GroupMask;
|
||||
localPart.EveryoneMask = updatedPart.EveryoneMask;
|
||||
localPart.NextOwnerMask = updatedPart.NextOwnerMask;
|
||||
localPart.Flags = updatedPart.Flags;
|
||||
|
||||
//We will update CollisionSound with special care so that it does not lead to ScheduleFullUpdate of this part, to make the actor think it just made an update and
|
||||
//need to propogate that update to other actors.
|
||||
//localPart.CollisionSound = updatedPart.CollisionSound;
|
||||
collisionSoundUpdated = UpdateCollisionSound(updatedPart.CollisionSound);
|
||||
|
||||
localPart.CollisionSoundVolume = updatedPart.CollisionSoundVolume;
|
||||
localPart.MediaUrl = updatedPart.MediaUrl;
|
||||
localPart.TextureAnimation = updatedPart.TextureAnimation;
|
||||
localPart.ParticleSystem = updatedPart.ParticleSystem;
|
||||
|
||||
m_bucketSyncInfoList[bucketName].LastUpdateTimeStamp = updatedPart.BucketSyncInfoList[bucketName].LastUpdateTimeStamp;
|
||||
m_bucketSyncInfoList[bucketName].LastUpdateActorID = updatedPart.BucketSyncInfoList[bucketName].LastUpdateActorID;
|
||||
|
||||
if (collisionSoundUpdated)
|
||||
{
|
||||
//If the local actor is Script Engine, it will catch this evnet and trigger aggregateScriptEvents()
|
||||
m_parentGroup.Scene.EventManager.TriggerAggregateScriptEvents(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void PhysicsBucketUpdateProcessor(SceneObjectPart updatedPart, string bucketName)
|
||||
{
|
||||
//If needed, we could define new set functions for these properties, and cast this SOP to SOPBase to
|
||||
//invoke the set functions in SOPBase
|
||||
//SceneObjectPartBase localPart = (SceneObjectPartBase)this;
|
||||
SceneObjectPart localPart = this;
|
||||
|
||||
lock (m_bucketUpdateLocks[bucketName])
|
||||
{
|
||||
localPart.GroupPosition = updatedPart.GroupPosition;
|
||||
localPart.OffsetPosition = updatedPart.OffsetPosition;
|
||||
localPart.Scale = updatedPart.Scale;
|
||||
localPart.Velocity = updatedPart.Velocity;
|
||||
localPart.AngularVelocity = updatedPart.AngularVelocity;
|
||||
localPart.RotationOffset = updatedPart.RotationOffset;
|
||||
//properties in Physics bucket whose update processors are in PhysicsActor
|
||||
/*
|
||||
"Position":
|
||||
"Size":
|
||||
"Force":
|
||||
"RotationalVelocity":
|
||||
"PA_Acceleration":
|
||||
"Torque":
|
||||
"Orientation":
|
||||
"IsPhysical":
|
||||
"Flying":
|
||||
"Buoyancy":
|
||||
* */
|
||||
|
||||
m_bucketSyncInfoList[bucketName].LastUpdateTimeStamp = updatedPart.BucketSyncInfoList[bucketName].LastUpdateTimeStamp;
|
||||
m_bucketSyncInfoList[bucketName].LastUpdateActorID = updatedPart.BucketSyncInfoList[bucketName].LastUpdateActorID;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue