public void CopyFrom(AgentData cAgent) { try { m_callbackURI = cAgent.CallbackURI; m_pos = cAgent.Position; if (PhysicsActor != null) { AbsolutePosition = cAgent.Position; PhysicsActor.ForceSetPosition(cAgent.Position); } Velocity = cAgent.Velocity; m_CameraCenter = cAgent.Center; SetHeight(cAgent.Size.Z); m_CameraAtAxis = cAgent.AtAxis; m_CameraLeftAxis = cAgent.LeftAxis; m_CameraUpAxis = cAgent.UpAxis; DrawDistance = cAgent.Far; if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0) ControllingClient.SetChildAgentThrottle(cAgent.Throttles); m_headrotation = cAgent.HeadRotation; m_bodyRot = cAgent.BodyRotation; m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags; m_savedVelocity = cAgent.Velocity; SpeedModifier = cAgent.Speed; DrawDistance = cAgent.DrawDistance; m_setAlwaysRun = cAgent.AlwaysRun; if (cAgent.IsCrossing) { m_scene.AuthenticateHandler.GetAgentCircuitData(UUID).teleportFlags |= (uint)TeleportFlags.ViaRegionID; m_scene.AuthenticateHandler.GetAgentCircuitData(UUID).reallyischild = false;//We're going to be a root } IAvatarAppearanceModule appearance = RequestModuleInterface<IAvatarAppearanceModule>(); if (appearance != null) { appearance.InitialHasWearablesBeenSent = cAgent.SentInitialWearables; appearance.Appearance = new AvatarAppearance(cAgent.Appearance); } // Animations try { Animator.ResetAnimations(); Animator.Animations.FromArray(cAgent.Anims); } catch { } try { if (cAgent.SittingObjects != null && cAgent.SittingObjects.m_sittingObjectXML != "") { ISceneObject sceneObject = null; IRegionSerialiserModule mod = Scene.RequestModuleInterface<IRegionSerialiserModule>(); if (mod != null) sceneObject = mod.DeserializeGroupFromXml2(cAgent.SittingObjects.m_sittingObjectXML, Scene); if (sceneObject != null) { //We were sitting on something when we crossed if (Scene.SceneGraph.RestorePrimToScene(sceneObject)) { if (sceneObject.RootChild.IsSelected) sceneObject.RootChild.CreateSelected = true; sceneObject.ScheduleGroupUpdate(PrimUpdateFlags.ForcedFullUpdate); sceneObject.CreateScriptInstances(0, false, StateSource.PrimCrossing, UUID.Zero); sceneObject.ResumeScripts(); sceneObject.RootChild.PhysActor.ForceSetVelocity(cAgent.Velocity); sceneObject.RootChild.PhysActor.Velocity = (cAgent.Velocity); sceneObject.AbsolutePosition = cAgent.Position; Animator.TrySetMovementAnimation(cAgent.SittingObjects.m_animation); m_nextSitAnimation = cAgent.SittingObjects.m_animation; cAgent.SittingObjects.m_objectID = sceneObject.UUID; m_objectToSitOn = cAgent.SittingObjects; foreach (ISceneChildEntity child in sceneObject.ChildrenEntities()) { foreach (TaskInventoryItem taskInv in child.Inventory.GetInventoryItems()) { TaskInventoryItem inv = taskInv; #if (!ISWIN) foreach (ControllerData cd in cAgent.Controllers) { if (cd.ItemID == inv.ItemID || cd.ItemID == inv.OldItemID) { cd.ItemID = taskInv.ItemID; } } #else foreach (ControllerData cd in cAgent.Controllers.Where(cd => cd.ItemID == inv.ItemID || cd.ItemID == inv.OldItemID)) { cd.ItemID = taskInv.ItemID; } #endif } } try { IScriptControllerModule m = RequestModuleInterface<IScriptControllerModule>(); if (m != null) if (cAgent.Controllers != null) m.Deserialize(cAgent.Controllers); } catch { } } } } } catch { } } catch (Exception ex) { MainConsole.Instance.Warn("[ScenePresence]: Error in CopyFrom: " + ex); } }
public void SitOnObjectAfterCrossing(SittingObjectData sod) { UUID targetID = sod.m_objectID; ISceneChildEntity part = FindNextAvailableSitTarget(targetID); if (part == null) return; if (String.IsNullOrEmpty(sod.m_animation)) m_nextSitAnimation = "SIT"; m_requestedSitTargetUUID = targetID; m_sitting = true; Vector3 sitTargetPos = sod.m_sitTargetPos; Quaternion sitTargetOrient = sod.m_sitTargetRot; m_pos = new Vector3(sitTargetPos.X, sitTargetPos.Y, sitTargetPos.Z); //m_pos += SIT_TARGET_ADJUSTMENT; m_bodyRot = sitTargetOrient; m_parentPosition = part.AbsolutePosition; m_parentID = m_requestedSitTargetUUID; part.SitTargetAvatar.Add(UUID); part.ParentEntity.SitTargetAvatar.Add(UUID); Velocity = Vector3.Zero; RemoveFromPhysicalScene(); //Send updates to everyone about us foreach (IScenePresence sp in m_scene.GetScenePresences()) { sp.SceneViewer.QueuePresenceForFullUpdate(this, true); } Animator.TrySetMovementAnimation(m_nextSitAnimation); }