diff options
author | Melanie | 2012-02-26 15:09:00 +0100 |
---|---|---|
committer | Melanie | 2012-02-26 15:09:00 +0100 |
commit | ac1e30156a7ec8e461b3378149a082b3b5d57884 (patch) | |
tree | 04bffeb4b9862b94588b137860e9e1eb2dcafbe2 /OpenSim | |
parent | Fix deserialization of Buoyancy, Force and Torque. Remove debug from the new (diff) | |
download | opensim-SC-ac1e30156a7ec8e461b3378149a082b3b5d57884.zip opensim-SC-ac1e30156a7ec8e461b3378149a082b3b5d57884.tar.gz opensim-SC-ac1e30156a7ec8e461b3378149a082b3b5d57884.tar.bz2 opensim-SC-ac1e30156a7ec8e461b3378149a082b3b5d57884.tar.xz |
Implement proper selection behavior
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | 31 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | 6 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 2 |
3 files changed, 37 insertions, 2 deletions
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs index 7f651aa..bf18f4d 100644 --- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs +++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | |||
@@ -72,6 +72,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
72 | private DataFormat m_data = DataFormat.Translation | DataFormat.Rotation; | 72 | private DataFormat m_data = DataFormat.Translation | DataFormat.Rotation; |
73 | 73 | ||
74 | private bool m_running = false; | 74 | private bool m_running = false; |
75 | [NonSerialized()] | ||
76 | private bool m_selected = false; | ||
75 | 77 | ||
76 | private int m_iterations = 0; | 78 | private int m_iterations = 0; |
77 | 79 | ||
@@ -82,6 +84,25 @@ namespace OpenSim.Region.Framework.Scenes | |||
82 | get { return m_data; } | 84 | get { return m_data; } |
83 | } | 85 | } |
84 | 86 | ||
87 | public bool Selected | ||
88 | { | ||
89 | set | ||
90 | { | ||
91 | if (value) | ||
92 | { | ||
93 | // Once we're let go, recompute positions | ||
94 | if (m_selected) | ||
95 | UpdateSceneObject(m_group); | ||
96 | } | ||
97 | else | ||
98 | { | ||
99 | // Save selection position in case we get moved | ||
100 | if (!m_selected) | ||
101 | m_serializedPosition = m_group.AbsolutePosition; | ||
102 | } | ||
103 | m_selected = value; } | ||
104 | } | ||
105 | |||
85 | public static KeyframeMotion FromData(SceneObjectGroup grp, Byte[] data) | 106 | public static KeyframeMotion FromData(SceneObjectGroup grp, Byte[] data) |
86 | { | 107 | { |
87 | MemoryStream ms = new MemoryStream(data); | 108 | MemoryStream ms = new MemoryStream(data); |
@@ -276,6 +297,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
276 | m_currentFrame = m_frames[0]; | 297 | m_currentFrame = m_frames[0]; |
277 | } | 298 | } |
278 | 299 | ||
300 | if (m_selected) | ||
301 | { | ||
302 | if (m_group.RootPart.Velocity != Vector3.Zero) | ||
303 | { | ||
304 | m_group.RootPart.Velocity = Vector3.Zero; | ||
305 | m_group.SendGroupRootTerseUpdate(); | ||
306 | } | ||
307 | return; | ||
308 | } | ||
309 | |||
279 | // Do the frame processing | 310 | // Do the frame processing |
280 | double steps = (double)m_currentFrame.TimeMS / timerInterval; | 311 | double steps = (double)m_currentFrame.TimeMS / timerInterval; |
281 | float complete = ((float)m_currentFrame.TimeTotal - (float)m_currentFrame.TimeMS) / (float)m_currentFrame.TimeTotal; | 312 | float complete = ((float)m_currentFrame.TimeTotal - (float)m_currentFrame.TimeMS) / (float)m_currentFrame.TimeTotal; |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index bf2e775..b006045 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | |||
@@ -138,12 +138,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
138 | { | 138 | { |
139 | SceneObjectGroup sog = part.ParentGroup; | 139 | SceneObjectGroup sog = part.ParentGroup; |
140 | sog.SendPropertiesToClient(remoteClient); | 140 | sog.SendPropertiesToClient(remoteClient); |
141 | sog.IsSelected = true; | ||
142 | 141 | ||
143 | // A prim is only tainted if it's allowed to be edited by the person clicking it. | 142 | // A prim is only tainted if it's allowed to be edited by the person clicking it. |
144 | if (Permissions.CanEditObject(sog.UUID, remoteClient.AgentId) | 143 | if (Permissions.CanEditObject(sog.UUID, remoteClient.AgentId) |
145 | || Permissions.CanMoveObject(sog.UUID, remoteClient.AgentId)) | 144 | || Permissions.CanMoveObject(sog.UUID, remoteClient.AgentId)) |
146 | { | 145 | { |
146 | sog.IsSelected = true; | ||
147 | EventManager.TriggerParcelPrimCountTainted(); | 147 | EventManager.TriggerParcelPrimCountTainted(); |
148 | } | 148 | } |
149 | } | 149 | } |
@@ -215,7 +215,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
215 | // handled by group, but by prim. Legacy cruft. | 215 | // handled by group, but by prim. Legacy cruft. |
216 | // TODO: Make selection flagging per prim! | 216 | // TODO: Make selection flagging per prim! |
217 | // | 217 | // |
218 | part.ParentGroup.IsSelected = false; | 218 | if (Permissions.CanEditObject(part.ParentGroup.UUID, remoteClient.AgentId) |
219 | || Permissions.CanMoveObject(part.ParentGroup.UUID, remoteClient.AgentId)) | ||
220 | part.ParentGroup.IsSelected = false; | ||
219 | 221 | ||
220 | if (part.ParentGroup.IsAttachment) | 222 | if (part.ParentGroup.IsAttachment) |
221 | isAttachment = true; | 223 | isAttachment = true; |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index ac2fe82..e509d4e 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -726,6 +726,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
726 | child.PhysActor.Selected = value; | 726 | child.PhysActor.Selected = value; |
727 | } | 727 | } |
728 | } | 728 | } |
729 | if (KeyframeMotion != null) | ||
730 | KeyframeMotion.Selected = value; | ||
729 | } | 731 | } |
730 | } | 732 | } |
731 | 733 | ||