private void SetPropertyValue(ScenePresence sp, SyncableProperties.Type property, SyncedProperty pSyncInfo) { if (sp == null || pSyncInfo == null) { return; } Object pValue = pSyncInfo.LastUpdateValue; switch (property) { case SyncableProperties.Type.LocalId: sp.LocalId = (uint)pValue; break; case SyncableProperties.Type.AbsolutePosition: sp.AbsolutePosition = (Vector3)pValue; break; case SyncableProperties.Type.AgentCircuitData: DebugLog.WarnFormat("{0}: Received updated AgentCircuitData. Not implemented", LogHeader); break; case SyncableProperties.Type.ParentId: uint localID = (uint)pValue; if (localID == 0) { // DebugLog.DebugFormat("{0}: SetPropertyValue:ParentID. Standup. Input={1}", LogHeader, localID); // DEBUG DEBUG sp.StandUp(); } else { SceneObjectPart parentPart = Scene.GetSceneObjectPart(localID); if (parentPart != null) // TODO ?? { sp.HandleAgentRequestSit(sp.ControllingClient, sp.ControllingClient.AgentId, parentPart.UUID, Vector3.Zero); // DebugLog.DebugFormat("{0}: SetPropertyValue:ParentID. SitRequest. Input={1},sp={2},newParentID={3}", // LogHeader, localID, (string)(sp == null ? "NULL" : sp.Name), sp.ParentID); // DEBUG DEBUG } } //sp.ParentID = (uint)pValue; break; case SyncableProperties.Type.AgentControlFlags: sp.AgentControlFlags = (uint)pValue; break; case SyncableProperties.Type.AllowMovement: sp.AllowMovement = (bool)pValue; break; case SyncableProperties.Type.AvatarAppearance: sp.Appearance.Unpack((OSDMap)pValue); sp.SendAppearanceToAllOtherAgents(); DebugLog.DebugFormat("{0} Received updated AvatarAppearance for uuid {1}.", LogHeader, sp.UUID); break; case SyncableProperties.Type.Animations: UpdateAvatarAnimations(sp, (OSDArray)pValue); break; case SyncableProperties.Type.Rotation: sp.Rotation = (Quaternion)pValue; break; case SyncableProperties.Type.PA_Velocity: if (sp.PhysicsActor != null) { sp.PhysicsActor.Velocity = (Vector3)pValue; } break; case SyncableProperties.Type.RealRegion: ////// NOP ////// break; case SyncableProperties.Type.PA_TargetVelocity: if (sp.PhysicsActor != null) { sp.PhysicsActor.TargetVelocity = (Vector3)pValue; } break; case SyncableProperties.Type.Flying: sp.Flying = (bool)pValue; break; case SyncableProperties.Type.PresenceType: DebugLog.WarnFormat("{0} Received updated PresenceType for uuid {1}. Not implemented", LogHeader, sp.UUID); break; case SyncableProperties.Type.IsColliding: if (sp.PhysicsActor != null) { sp.IsColliding = (bool)pValue; } break; } // When presence values are changed, we tell the simulator with an event GenerateAgentUpdated(sp); }