From 03f6734f4367b08e2b181ed68bc80b885e76148f Mon Sep 17 00:00:00 2001 From: Tom Date: Wed, 7 Sep 2011 09:42:18 -0700 Subject: First set of merge fixes --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 19 +- OpenSim/Region/Framework/Scenes/Scene.cs | 35 --- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 15 +- .../Region/Framework/Scenes/SceneObjectGroup.cs | 87 ++---- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 63 ++--- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 309 ++++++--------------- 6 files changed, 147 insertions(+), 381 deletions(-) (limited to 'OpenSim/Region/Framework/Scenes') diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 89f3683..63dd550 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -968,24 +968,25 @@ namespace OpenSim.Region.Framework.Scenes if (part != null) { group = part.ParentGroup; - } + } if (part != null && group != null) { if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId)) return; - + TaskInventoryItem item = group.GetInventoryItem(localID, itemID); if (item == null) return; - if (item.Type == 10) - { - part.RemoveScriptEvents(itemID); - EventManager.TriggerRemoveScript(localID, itemID); + if (item.Type == 10) + { + part.RemoveScriptEvents(itemID); + EventManager.TriggerRemoveScript(localID, itemID); + } + + group.RemoveInventoryItem(localID, itemID); + part.GetProperties(remoteClient); } - - group.RemoveInventoryItem(localID, itemID); - part.GetProperties(remoteClient); } private InventoryItemBase CreateAgentInventoryItemFromTask(UUID destAgent, SceneObjectPart part, UUID itemId) diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 26fe61d..345c2df 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -5347,41 +5347,6 @@ namespace OpenSim.Region.Framework.Scenes // } // } - lock (m_cleaningAttachments) - { - ForEachSOG(delegate (SceneObjectGroup grp) - { - if (grp.RootPart.Shape.PCode == 0 && grp.RootPart.Shape.State != 0 && (!objectsToDelete.Contains(grp))) - { - UUID agentID = grp.OwnerID; - if (agentID == UUID.Zero) - { - objectsToDelete.Add(grp); - return; - } - - ScenePresence sp = GetScenePresence(agentID); - if (sp == null) - { - objectsToDelete.Add(grp); - return; - } - } - }); - } - - if (objectsToDelete.Count > 0) - { - m_log.DebugFormat("[SCENE]: Starting delete of {0} dropped attachments", objectsToDelete.Count); - foreach (SceneObjectGroup grp in objectsToDelete) - { - m_log.InfoFormat("[SCENE]: Deleting dropped attachment {0} of user {1}", grp.UUID, grp.OwnerID); - DeleteSceneObject(grp, true); - } - m_log.Debug("[SCENE]: Finished dropped attachment deletion"); - } - } - public void ThreadAlive(int threadCode) { switch(threadCode) diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 29edf13..42e2502 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -1437,9 +1437,9 @@ namespace OpenSim.Region.Framework.Scenes // Set the new attachment point data in the object byte attachmentPoint = group.GetAttachmentPoint(); group.UpdateGroupPosition(pos); - group.RootPart.IsAttachment = false; + group.IsAttachment = false; group.AbsolutePosition = group.RootPart.AttachedPos; - group.SetAttachmentPoint(attachmentPoint); + group.AttachmentPoint = attachmentPoint; group.HasGroupChanged = true; } else @@ -1723,12 +1723,11 @@ namespace OpenSim.Region.Framework.Scenes // So that, on delink, no prims are unwittingly // left for sale and sold off - if (child != null) - { - child.RootPart.ObjectSaleType = 0; - child.RootPart.SalePrice = 10; - childGroups.Add(child); - } + if (child != null) + { + child.RootPart.ObjectSaleType = 0; + child.RootPart.SalePrice = 10; + childGroups.Add(child); } } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 88a6232..35684e0 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -350,10 +350,6 @@ namespace OpenSim.Region.Framework.Scenes { get { return m_rotation; } set { - foreach(SceneObjectPart p in m_parts.GetArray()) - { - p.StoreUndoState(UndoType.STATE_GROUP_ROTATION); - } m_rotation = value; } } @@ -487,8 +483,6 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectPart[] parts = m_parts.GetArray(); foreach (SceneObjectPart part in parts) { - part.IgnoreUndoUpdate = false; - part.StoreUndoState(UndoType.STATE_GROUP_POSITION); part.GroupPosition = val; if (!m_dupeInProgress) { @@ -1193,45 +1187,31 @@ namespace OpenSim.Region.Framework.Scenes /// /// /// - public void AttachToAgent(UUID agentID, uint attachmentpoint, Vector3 AttachOffset, bool silent) + private void AttachToAgent( + ScenePresence avatar, SceneObjectGroup so, uint attachmentpoint, Vector3 attachOffset, bool silent) { - ScenePresence avatar = m_scene.GetScenePresence(agentID); if (avatar != null) { // don't attach attachments to child agents if (avatar.IsChildAgent) return; -// m_log.DebugFormat("[SOG]: Adding attachment {0} to avatar {1}", Name, avatar.Name); - - DetachFromBackup(); - // Remove from database and parcel prim count - m_scene.DeleteFromStorage(UUID); + m_scene.DeleteFromStorage(so.UUID); m_scene.EventManager.TriggerParcelPrimCountTainted(); - m_rootPart.AttachedAvatar = agentID; + so.AttachedAvatar = avatar.UUID; - //Anakin Lohner bug #3839 - lock (m_parts) + if (so.RootPart.PhysActor != null) { - foreach (SceneObjectPart p in m_parts.GetArray()) - { - p.AttachedAvatar = agentID; - } + m_scene.PhysicsScene.RemovePrim(so.RootPart.PhysActor); + so.RootPart.PhysActor = null; } - if (m_rootPart.PhysActor != null) - { - m_scene.PhysicsScene.RemovePrim(m_rootPart.PhysActor); - m_rootPart.PhysActor = null; - } - - AbsolutePosition = AttachOffset; - m_rootPart.AttachedPos = AttachOffset; - m_rootPart.IsAttachment = true; - - m_rootPart.SetParentLocalId(avatar.LocalId); - SetAttachmentPoint(Convert.ToByte(attachmentpoint)); + so.AbsolutePosition = attachOffset; + so.RootPart.AttachedPos = attachOffset; + so.IsAttachment = true; + so.RootPart.SetParentLocalId(avatar.LocalId); + so.AttachmentPoint = attachmentpoint; avatar.AddAttachment(this); @@ -1254,7 +1234,7 @@ namespace OpenSim.Region.Framework.Scenes { m_log.WarnFormat( "[SOG]: Tried to add attachment {0} to avatar with UUID {1} in region {2} but the avatar is not present", - UUID, agentID, Scene.RegionInfo.RegionName); + UUID, avatar.ControllingClient.AgentId, Scene.RegionInfo.RegionName); } } @@ -1263,11 +1243,6 @@ namespace OpenSim.Region.Framework.Scenes return m_rootPart.Shape.State; } - public void ClearPartAttachmentData() - { - SetAttachmentPoint((Byte)0); - } - public void DetachToGround() { ScenePresence avatar = m_scene.GetScenePresence(m_rootPart.AttachedAvatar); @@ -1788,19 +1763,19 @@ namespace OpenSim.Region.Framework.Scenes // This is only necessary when userExposed is false! - bool previousAttachmentStatus = dupe.IsAttachment; + bool previousAttachmentStatus = dupe.IsAttachment; - if (!userExposed) - dupe.IsAttachment = true; + if (!userExposed) + dupe.IsAttachment = true; if (!userExposed) dupe.RootPart.IsAttachment = true; dupe.AbsolutePosition = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z); - if (!userExposed) - { - dupe.IsAttachment = previousAttachmentStatus; - } + if (!userExposed) + { + dupe.IsAttachment = previousAttachmentStatus; + } if (!userExposed) { @@ -1855,8 +1830,8 @@ namespace OpenSim.Region.Framework.Scenes dupe.UpdateParentIDs(); dupe.HasGroupChanged = true; dupe.AttachToBackup(); - - ScheduleGroupForFullUpdate(); + } + ScheduleGroupForFullUpdate(); // Need to duplicate the physics actor as well if (part.PhysActor != null && userExposed) { @@ -3175,7 +3150,6 @@ namespace OpenSim.Region.Framework.Scenes { if (IsAttachment) { - m_rootPart.StoreUndoState(UndoType.STATE_GROUP_POSITION); m_rootPart.AttachedPos = pos; } if (RootPart.GetStatusSandbox()) @@ -3207,9 +3181,9 @@ namespace OpenSim.Region.Framework.Scenes { SceneObjectPart part = GetChildPart(localID); -// SceneObjectPart[] parts = m_parts.GetArray(); -// for (int i = 0; i < parts.Length; i++) -// parts[i].StoreUndoState(); + SceneObjectPart[] parts = m_parts.GetArray(); + for (int i = 0; i < parts.Length; i++) + parts[i].StoreUndoState(); if (part != null) { @@ -3368,8 +3342,6 @@ namespace OpenSim.Region.Framework.Scenes { SceneObjectPart part = GetChildPart(localID); SceneObjectPart[] parts = m_parts.GetArray(); - for (int i = 0; i < parts.Length; i++) - parts[i].StoreUndoState(UndoType.STATE_PRIM_ROTATION); if (part != null) { @@ -3440,14 +3412,7 @@ namespace OpenSim.Region.Framework.Scenes Quaternion axRot = rot; Quaternion oldParentRot = m_rootPart.RotationOffset; - - m_rootPart.StoreUndoState(UndoType.STATE_PRIM_ROTATION); - bool cancelUndo = false; - if (!m_rootPart.Undoing) - { - m_rootPart.Undoing = true; - cancelUndo = true; - } + m_rootPart.StoreUndoState(); //Don't use UpdateRotation because it schedules an update prematurely m_rootPart.RotationOffset = rot; diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 893faf8..6988718 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -852,7 +852,7 @@ namespace OpenSim.Region.Framework.Scenes set { - StoreUndoState(UndoType.STATE_PRIM_ROTATION); + StoreUndoState(); m_rotationOffset = value; PhysicsActor actor = PhysActor; @@ -3590,7 +3590,8 @@ namespace OpenSim.Region.Framework.Scenes m_parentGroup.ScheduleGroupForTerseUpdate(); //m_parentGroup.ScheduleGroupForFullUpdate(); } - public void StoreUndoState(UndoType type) + + public void StoreUndoState() { StoreUndoState(false); } @@ -3613,57 +3614,45 @@ namespace OpenSim.Region.Framework.Scenes // TODO: May need to fix for group comparison if (last.Compare(this)) { - // m_log.DebugFormat( - // "[SCENE OBJECT PART]: Not storing undo for {0} {1} since current state is same as last undo state, initial stack size {2}", - // Name, LocalId, m_undo.Count); - + // m_log.DebugFormat( + // "[SCENE OBJECT PART]: Not storing undo for {0} {1} since current state is same as last undo state, initial stack size {2}", + // Name, LocalId, m_undo.Count); + return; } } } - - // m_log.DebugFormat( - // "[SCENE OBJECT PART]: Storing undo state for {0} {1}, forGroup {2}, initial stack size {3}", - // Name, LocalId, forGroup, m_undo.Count); - + + // m_log.DebugFormat( + // "[SCENE OBJECT PART]: Storing undo state for {0} {1}, forGroup {2}, initial stack size {3}", + // Name, LocalId, forGroup, m_undo.Count); + if (m_parentGroup.GetSceneMaxUndo() > 0) { UndoState nUndo = new UndoState(this, forGroup); - - UndoState nUndo = new UndoState(this, type); - if (lastUndo != null) - { - TimeSpan ts = DateTime.Now.Subtract(lastUndo.LastUpdated); - if (ts.TotalMilliseconds < 500) - { - //Delete the last entry since it was less than 500 milliseconds ago - nUndo.Merge(lastUndo); - m_undo.Pop(); - } - } m_undo.Push(nUndo); - + if (m_redo.Count > 0) m_redo.Clear(); - - // m_log.DebugFormat( - // "[SCENE OBJECT PART]: Stored undo state for {0} {1}, forGroup {2}, stack size now {3}", - // Name, LocalId, forGroup, m_undo.Count); + + // m_log.DebugFormat( + // "[SCENE OBJECT PART]: Stored undo state for {0} {1}, forGroup {2}, stack size now {3}", + // Name, LocalId, forGroup, m_undo.Count); } } } } -// else -// { -// m_log.DebugFormat("[SCENE OBJECT PART]: Ignoring undo store for {0} {1}", Name, LocalId); -// } + // else + // { + // m_log.DebugFormat("[SCENE OBJECT PART]: Ignoring undo store for {0} {1}", Name, LocalId); + // } } -// else -// { -// m_log.DebugFormat( -// "[SCENE OBJECT PART]: Ignoring undo store for {0} {1} since already undoing", Name, LocalId); -// } + // else + // { + // m_log.DebugFormat( + // "[SCENE OBJECT PART]: Ignoring undo store for {0} {1} since already undoing", Name, LocalId); + // } } /// diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index de9b1f3..8ee7d89 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1364,9 +1364,12 @@ namespace OpenSim.Region.Framework.Scenes /// /// This is the event handler for client movement. If a client is moving, this event is triggering. /// + /// + /// This is the event handler for client movement. If a client is moving, this event is triggering. + /// public void HandleAgentUpdate(IClientAPI remoteClient, AgentUpdateArgs agentData) { -// m_log.DebugFormat("[SCENE PRESENCE]: Received agent update from {0}", remoteClient.Name); + // m_log.DebugFormat("[SCENE PRESENCE]: Received agent update from {0}", remoteClient.Name); //if (m_isChildAgent) //{ @@ -1389,7 +1392,6 @@ namespace OpenSim.Region.Framework.Scenes m_log.Error("[AVATAR]: NonFinite Avatar position detected... Reset Position. Mantis this please. Error #9999902"); m_pos = m_LastFinitePos; - if (!m_pos.IsFinite()) { m_pos.X = 127f; @@ -1459,6 +1461,7 @@ namespace OpenSim.Region.Framework.Scenes m_scene.PhysicsScene.RaycastWorld(m_pos, Vector3.Normalize(m_CameraCenter - posAdjusted), Vector3.Distance(m_CameraCenter, posAdjusted) + 0.3f, RayCastCameraCallback); } } + lock (scriptedcontrols) { if (scriptedcontrols.Count > 0) @@ -1473,9 +1476,6 @@ namespace OpenSim.Region.Framework.Scenes if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) != 0) { - m_updateCount = 0; // Kill animation update burst so that the SIT_G.. will stick. - Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); - // TODO: This doesn't prevent the user from walking yet. // Setting parent ID would fix this, if we knew what value // to use. Or we could add a m_isSitting variable. @@ -1530,20 +1530,6 @@ namespace OpenSim.Region.Framework.Scenes if (actor.Flying != oldflying) update_movementflag = true; - if (m_animator.m_jumping) // add for jumping - update_movementflag = true; - - if (q != m_bodyRot) - { - m_bodyRot = q; - update_rotation = true; - } - - //guilty until proven innocent.. - bool Nudging = true; - //Basically, if there is at least one non-nudge control then we don't need - //to worry about stopping the avatar - if (m_parentID == 0) { bool bAllowUpdateMoveToPosition = false; @@ -1557,12 +1543,10 @@ namespace OpenSim.Region.Framework.Scenes else dirVectors = Dir_Vectors; - bool[] isNudge = GetDirectionIsNudge(); - - - - - + // The fact that m_movementflag is a byte needs to be fixed + // it really should be a uint + // A DIR_CONTROL_FLAG occurs when the user is trying to move in a particular direction. + uint nudgehack = 250; foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS) { if (((uint)flags & (uint)DCF) != 0) @@ -1572,30 +1556,43 @@ namespace OpenSim.Region.Framework.Scenes try { agent_control_v3 += dirVectors[i]; - if (isNudge[i] == false) - { - Nudging = false; - } + //m_log.DebugFormat("[Motion]: {0}, {1}",i, dirVectors[i]); } catch (IndexOutOfRangeException) { // Why did I get this? } - if ((m_movementflag & (uint)DCF) == 0) + if ((m_movementflag & (byte)(uint)DCF) == 0) { + if (DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACK_NUDGE) + { + m_movementflag |= (byte)nudgehack; + } -// m_log.DebugFormat("[SCENE PRESENCE]: Updating m_movementflag for {0} with {1}", Name, DCF); + // m_log.DebugFormat("[SCENE PRESENCE]: Updating m_movementflag for {0} with {1}", Name, DCF); m_movementflag += (byte)(uint)DCF; update_movementflag = true; } } else { - if ((m_movementflag & (uint)DCF) != 0) + if ((m_movementflag & (byte)(uint)DCF) != 0 || + ((DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACK_NUDGE) + && ((m_movementflag & (byte)nudgehack) == nudgehack)) + ) // This or is for Nudge forward { - m_movementflag -= (byte)(uint)DCF; + // m_log.DebugFormat("[SCENE PRESENCE]: Updating m_movementflag for {0} with lack of {1}", Name, DCF); + m_movementflag -= ((byte)(uint)DCF); update_movementflag = true; + + /* + if ((DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE) + && ((m_movementflag & (byte)nudgehack) == nudgehack)) + { + m_log.Debug("Removed Hack flag"); + } + */ } else { @@ -1605,128 +1602,19 @@ namespace OpenSim.Region.Framework.Scenes i++; } - if (MovingToTarget) - { - m_moveToPositionTarget = Vector3.Zero; - m_moveToPositionInProgress = false; - update_movementflag = true; - bAllowUpdateMoveToPosition = false; - } - if (bAllowUpdateMoveToPosition && (m_moveToPositionInProgress && !m_autopilotMoving)) + if (MovingToTarget) { -/* - bool twoD = false; - bool there = false; - if (Animator != null) - { - switch (Animator.CurrentMovementAnimation) - { - case "STAND": - case "WALK": - case "RUN": - case "CROUCH": - case "CROUCHWALK": - { - twoD = true; - } - break; - } - } - - if (twoD) - { -*/ - Vector3 abspos = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, 0.0f); - Vector3 tgt = new Vector3(m_moveToPositionTarget.X, m_moveToPositionTarget.Y, 0.0f); -/* if (Util.GetDistanceTo(abspos, tgt) <= 0.5f) there = true; - } - else - { - if (Util.GetDistanceTo(AbsolutePosition, m_moveToPositionTarget) <= 0.5f) there = true; - } -*/ - //Check the error term of the current position in relation to the target position -// if (Util.GetDistanceTo(AbsolutePosition, m_moveToPositionTarget) <= 0.5f) -// if (there) - if (Util.GetDistanceTo(abspos, tgt) <= 0.5f) + // If the user has pressed a key then we want to cancel any move to target. + if (DCFlagKeyPressed) { ResetMoveToTarget(); update_movementflag = true; } else if (bAllowUpdateMoveToPosition) { - try - { - // move avatar in 2D at one meter/second towards target, in avatar coordinate frame. - // This movement vector gets added to the velocity through AddNewMovement(). - // Theoretically we might need a more complex PID approach here if other - // unknown forces are acting on the avatar and we need to adaptively respond - // to such forces, but the following simple approach seems to works fine. - Vector3 LocalVectorToTarget3D = -// (m_moveToPositionTarget - AbsolutePosition) // vector from cur. pos to target in global coords - (tgt - abspos) - * Matrix4.CreateFromQuaternion(Quaternion.Inverse(bodyRotation)); // change to avatar coords - // Ignore z component of vector - Vector3 LocalVectorToTarget2D = new Vector3((float)(LocalVectorToTarget3D.X), (float)(LocalVectorToTarget3D.Y), 0f); - LocalVectorToTarget2D.Normalize(); - - //We're not nudging - Nudging = false; - agent_control_v3 += LocalVectorToTarget2D; - - // update avatar movement flags. the avatar coordinate system is as follows: - // - // +X (forward) - // - // ^ - // | - // | - // | - // | - // (left) +Y <--------o--------> -Y - // avatar - // | - // | - // | - // | - // v - // -X - // - - // based on the above avatar coordinate system, classify the movement into - // one of left/right/back/forward. - if (LocalVectorToTarget2D.Y > 0)//MoveLeft - { - m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT; - //AgentControlFlags - AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT; - update_movementflag = true; - } - else if (LocalVectorToTarget2D.Y < 0) //MoveRight - { - m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT; - AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT; - update_movementflag = true; - } - if (LocalVectorToTarget2D.X < 0) //MoveBack - { - m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK; - AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK; - update_movementflag = true; - } - else if (LocalVectorToTarget2D.X > 0) //Move Forward - { - m_movementflag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD; - AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD; - update_movementflag = true; - } - } - catch (Exception e) - { - //Avoid system crash, can be slower but... - m_log.DebugFormat("Crash! {0}", e.ToString()); - } + if (HandleMoveToTargetUpdate(ref agent_control_v3)) + update_movementflag = true; } } } @@ -1759,31 +1647,26 @@ namespace OpenSim.Region.Framework.Scenes // which occurs later in the main scene loop if (update_movementflag || (update_rotation && DCFlagKeyPressed)) { -// m_log.DebugFormat( -// "[SCENE PRESENCE]: In {0} adding velocity of {1} to {2}, umf = {3}, ur = {4}", -// m_scene.RegionInfo.RegionName, agent_control_v3, Name, update_movementflag, update_rotation); + // m_log.DebugFormat( + // "[SCENE PRESENCE]: In {0} adding velocity of {1} to {2}, umf = {3}, ur = {4}", + // m_scene.RegionInfo.RegionName, agent_control_v3, Name, update_movementflag, update_rotation); - AddNewMovement(agent_control_v3, q, Nudging); - - + AddNewMovement(agent_control_v3); } -// else -// { -// if (!update_movementflag) -// { -// m_log.DebugFormat( -// "[SCENE PRESENCE]: In {0} ignoring requested update of {1} for {2} as update_movementflag = false", -// m_scene.RegionInfo.RegionName, agent_control_v3, Name); -// } -// } + // else + // { + // if (!update_movementflag) + // { + // m_log.DebugFormat( + // "[SCENE PRESENCE]: In {0} ignoring requested update of {1} for {2} as update_movementflag = false", + // m_scene.RegionInfo.RegionName, agent_control_v3, Name); + // } + // } if (update_movementflag && m_parentID == 0) Animator.UpdateMovementAnimations(); } - if (update_movementflag && !SitGround) - Animator.UpdateMovementAnimations(); - m_scene.EventManager.TriggerOnClientMovement(this); m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); @@ -1799,24 +1682,20 @@ namespace OpenSim.Region.Framework.Scenes /// True if movement has been updated in some way. False otherwise. public bool HandleMoveToTargetUpdate(ref Vector3 agent_control_v3) { -// m_log.DebugFormat("[SCENE PRESENCE]: Called HandleMoveToTargetUpdate() for {0}", Name); + // m_log.DebugFormat("[SCENE PRESENCE]: Called HandleMoveToTargetUpdate() for {0}", Name); + bool updated = false; - public void StopMoveToPosition() - { - m_moveToPositionTarget = Vector3.Zero; - m_moveToPositionInProgress = false; - } + // m_log.DebugFormat( + // "[SCENE PRESENCE]: bAllowUpdateMoveToPosition {0}, m_moveToPositionInProgress {1}, m_autopilotMoving {2}", + // allowUpdate, m_moveToPositionInProgress, m_autopilotMoving); - public void DoMoveToPosition(Object sender, string method, List args) - { -//Console.WriteLine("SP:DoMoveToPosition"); - try + if (!m_autopilotMoving) { double distanceToTarget = Util.GetDistanceTo(AbsolutePosition, MoveToPositionTarget); -// m_log.DebugFormat( -// "[SCENE PRESENCE]: Abs pos of {0} is {1}, target {2}, distance {3}", -// Name, AbsolutePosition, MoveToPositionTarget, distanceToTarget); + // m_log.DebugFormat( + // "[SCENE PRESENCE]: Abs pos of {0} is {1}, target {2}, distance {3}", + // Name, AbsolutePosition, MoveToPositionTarget, distanceToTarget); // Check the error term of the current position in relation to the target position if (distanceToTarget <= 1) @@ -1839,7 +1718,7 @@ namespace OpenSim.Region.Framework.Scenes (MoveToPositionTarget - AbsolutePosition) // vector from cur. pos to target in global coords * Matrix4.CreateFromQuaternion(Quaternion.Inverse(Rotation)); // change to avatar coords // Ignore z component of vector -// Vector3 LocalVectorToTarget2D = new Vector3((float)(LocalVectorToTarget3D.X), (float)(LocalVectorToTarget3D.Y), 0f); + // Vector3 LocalVectorToTarget2D = new Vector3((float)(LocalVectorToTarget3D.X), (float)(LocalVectorToTarget3D.Y), 0f); LocalVectorToTarget3D.Normalize(); // update avatar movement flags. the avatar coordinate system is as follows: @@ -1905,9 +1784,9 @@ namespace OpenSim.Region.Framework.Scenes updated = true; } -// m_log.DebugFormat( -// "[SCENE PRESENCE]: HandleMoveToTargetUpdate adding {0} to move vector {1} for {2}", -// LocalVectorToTarget3D, agent_control_v3, Name); + // m_log.DebugFormat( + // "[SCENE PRESENCE]: HandleMoveToTargetUpdate adding {0} to move vector {1} for {2}", + // LocalVectorToTarget3D, agent_control_v3, Name); agent_control_v3 += LocalVectorToTarget3D; } @@ -1917,7 +1796,7 @@ namespace OpenSim.Region.Framework.Scenes m_log.DebugFormat("Crash! {0}", e.ToString()); } } - } + } return updated; } @@ -2746,41 +2625,21 @@ namespace OpenSim.Region.Framework.Scenes /// Rotate the avatar to the given rotation and apply a movement in the given relative vector /// /// The vector in which to move. This is relative to the rotation argument - /// The direction in which this avatar should now face. - public void AddNewMovement(Vector3 vec, Quaternion rotation, bool Nudging) + public void AddNewMovement(Vector3 vec) { - if (m_isChildAgent) - { - // WHAT??? - m_log.Debug("[SCENEPRESENCE]: AddNewMovement() called on child agent"); - - return; - } - m_perfMonMS = Util.EnvironmentTickCount(); Vector3 direc = vec * Rotation; direc.Normalize(); - PhysicsActor actor = m_physicsActor; - - if (actor.Flying != m_flyingOld) // add for fly velocity control - { - m_flyingOld = actor.Flying; // add for fly velocity control - if (!actor.Flying) m_wasFlying = true; // add for fly velocity control - } - - if (m_physicsActor.IsColliding == true) m_wasFlying = false; // add for fly velocity control - - if ((vec.Z == 0f) && !actor.Flying) direc.Z = 0f; // Prevent camera WASD up. direc *= 0.03f * 128f * m_speedModifier; + PhysicsActor actor = m_physicsActor; if (actor != null) { if (actor.Flying) { -// rm speed mod direc *= 4.0f; - direc *= 5.2f; // for speed mod + direc *= 4.0f; //bool controlland = (((m_AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) || ((m_AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0)); //bool colliding = (m_physicsActor.IsColliding==true); //if (controlland) @@ -2793,34 +2652,22 @@ namespace OpenSim.Region.Framework.Scenes // m_log.Info("[AGENT]: Stop FLying"); //} } - if (Animator.m_falling && m_wasFlying) // if falling from flying, disable motion add - { - direc *= 0.0f; - } - /* This jumping section removed to SPA else if (!actor.Flying && actor.IsColliding) { if (direc.Z > 2.0f) { - if(m_animator.m_animTickJump == -1) - { - direc.Z *= 3.0f; // jump - } - else - { - direc.Z *= 0.1f; // prejump - } - / * Animations are controlled via GetMovementAnimation() in ScenePresenceAnimator.cs - Animator.TrySetMovementAnimation("PREJUMP"); - Animator.TrySetMovementAnimation("JUMP"); - * / + direc.Z *= 3.0f; + + // TODO: PreJump and jump happen too quickly. Many times prejump gets ignored. + Animator.TrySetMovementAnimation("PREJUMP"); + Animator.TrySetMovementAnimation("JUMP"); } - } */ + } } // TODO: Add the force instead of only setting it to support multiple forces per frame? m_forceToApply = direc; - m_isNudging = Nudging; + m_scene.StatsReporter.AddAgentTime(Util.EnvironmentTickCountSubtract(m_perfMonMS)); } @@ -3961,7 +3808,7 @@ if (m_animator.m_jumping) force.Z = m_animator.m_jumpVelocity; // add for ju { StartCollidingMessage.Colliders = colliding; - foreach (SceneObjectGroup att in Attachments) + foreach (SceneObjectGroup att in GetAttachments()) Scene.EventManager.TriggerScriptCollidingStart(att.LocalId, StartCollidingMessage); } } @@ -3996,7 +3843,7 @@ if (m_animator.m_jumping) force.Z = m_animator.m_jumpVelocity; // add for ju { EndCollidingMessage.Colliders = colliding; - foreach (SceneObjectGroup att in Attachments) + foreach (SceneObjectGroup att in GetAttachments()) Scene.EventManager.TriggerScriptCollidingEnd(att.LocalId, EndCollidingMessage); } } @@ -4517,7 +4364,7 @@ if (m_animator.m_jumping) force.Z = m_animator.m_jumpVelocity; // add for ju List attachments = m_appearance.GetAttachments(); foreach (AvatarAttachment attach in attachments) { - if (m_isDeleted) + if (IsDeleted) return; int p = attach.AttachPoint; @@ -4603,7 +4450,7 @@ if (m_animator.m_jumping) force.Z = m_animator.m_jumpVelocity; // add for ju public void SaveChangedAttachments() { // Need to copy this list because DetachToInventoryPrep mods it - List attachments = new List(Attachments.ToArray()); + List attachments = new List(GetAttachments().ToArray()); IAttachmentsModule attachmentsModule = m_scene.AttachmentsModule; if (attachmentsModule != null) @@ -4612,12 +4459,12 @@ if (m_animator.m_jumping) force.Z = m_animator.m_jumpVelocity; // add for ju { if (grp.HasGroupChanged) // Resizer scripts? { - grp.RootPart.IsAttachment = false; + grp.IsAttachment = false; grp.AbsolutePosition = grp.RootPart.AttachedPos; // grp.DetachToInventoryPrep(); attachmentsModule.UpdateKnownItem(ControllingClient, grp, grp.GetFromItemID(), grp.OwnerID); - grp.RootPart.IsAttachment = true; + grp.IsAttachment = true; } } } -- cgit v1.1