diff options
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | 10 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 11 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 18 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 73 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 203 |
5 files changed, 234 insertions, 81 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index 668087f..fdadd32 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | |||
@@ -576,6 +576,16 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
576 | m_scenePresence.SendAnimPack(animations, seqs, objectIDs); | 576 | m_scenePresence.SendAnimPack(animations, seqs, objectIDs); |
577 | } | 577 | } |
578 | 578 | ||
579 | public void GetArrays(out UUID[] animIDs, out int[] sequenceNums, out UUID[] objectIDs) | ||
580 | { | ||
581 | animIDs = null; | ||
582 | sequenceNums = null; | ||
583 | objectIDs = null; | ||
584 | |||
585 | if(m_animations != null) | ||
586 | m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs); | ||
587 | } | ||
588 | |||
579 | public void SendAnimPackToClient(IClientAPI client) | 589 | public void SendAnimPackToClient(IClientAPI client) |
580 | { | 590 | { |
581 | if (m_scenePresence.IsChildAgent) | 591 | if (m_scenePresence.IsChildAgent) |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 0266faf..aa81000 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -3000,13 +3000,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
3000 | if (sp == null) | 3000 | if (sp == null) |
3001 | { | 3001 | { |
3002 | m_log.DebugFormat( | 3002 | m_log.DebugFormat( |
3003 | "[SCENE]: Adding new child scene presence {0} {1} to scene {2} at pos {3}", | 3003 | "[SCENE]: Adding new child scene presence {0} {1} to scene {2} at pos {3}, tpflags: {4}", |
3004 | client.Name, client.AgentId, RegionInfo.RegionName, client.StartPos); | 3004 | client.Name, client.AgentId, RegionInfo.RegionName, client.StartPos, |
3005 | ((TPFlags)aCircuit.teleportFlags).ToString()); | ||
3005 | 3006 | ||
3006 | m_clientManager.Add(client); | 3007 | m_clientManager.Add(client); |
3007 | SubscribeToClientEvents(client); | 3008 | SubscribeToClientEvents(client); |
3008 | 3009 | ||
3009 | sp = m_sceneGraph.CreateAndAddChildScenePresence(client, aCircuit.Appearance, type); | 3010 | sp = m_sceneGraph.CreateAndAddChildScenePresence(client, aCircuit.Appearance, type); |
3011 | |||
3012 | sp.TeleportFlags = (TPFlags)aCircuit.teleportFlags; | ||
3013 | |||
3014 | /* done in completMovement | ||
3010 | InventoryFolderBase cof = InventoryService.GetFolderForType(client.AgentId, (AssetType)46); | 3015 | InventoryFolderBase cof = InventoryService.GetFolderForType(client.AgentId, (AssetType)46); |
3011 | if (cof == null) | 3016 | if (cof == null) |
3012 | sp.COF = UUID.Zero; | 3017 | sp.COF = UUID.Zero; |
@@ -3014,9 +3019,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3014 | sp.COF = cof.ID; | 3019 | sp.COF = cof.ID; |
3015 | 3020 | ||
3016 | m_log.DebugFormat("[SCENE]: COF for {0} is {1}", client.AgentId, sp.COF); | 3021 | m_log.DebugFormat("[SCENE]: COF for {0} is {1}", client.AgentId, sp.COF); |
3022 | */ | ||
3017 | m_eventManager.TriggerOnNewPresence(sp); | 3023 | m_eventManager.TriggerOnNewPresence(sp); |
3018 | 3024 | ||
3019 | sp.TeleportFlags = (TPFlags)aCircuit.teleportFlags; | ||
3020 | } | 3025 | } |
3021 | else | 3026 | else |
3022 | { | 3027 | { |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index dd5ee65..d3dd5d7 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -2717,15 +2717,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
2717 | return; | 2717 | return; |
2718 | } | 2718 | } |
2719 | } | 2719 | } |
2720 | 2720 | ||
2721 | RootPart.SendFullUpdateToAllClients(); | 2721 | RootPart.SendFullUpdateToAllClientsInternal(); |
2722 | 2722 | ||
2723 | SceneObjectPart[] parts = m_parts.GetArray(); | 2723 | SceneObjectPart[] parts = m_parts.GetArray(); |
2724 | for (int i = 0; i < parts.Length; i++) | 2724 | for (int i = 0; i < parts.Length; i++) |
2725 | { | 2725 | { |
2726 | SceneObjectPart part = parts[i]; | 2726 | SceneObjectPart part = parts[i]; |
2727 | if (part != RootPart) | 2727 | if (part != RootPart) |
2728 | part.SendFullUpdateToAllClients(); | 2728 | part.SendFullUpdateToAllClientsInternal(); |
2729 | } | 2729 | } |
2730 | } | 2730 | } |
2731 | 2731 | ||
@@ -2740,16 +2740,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2740 | if (IsDeleted) | 2740 | if (IsDeleted) |
2741 | return; | 2741 | return; |
2742 | 2742 | ||
2743 | if (IsAttachment) | ||
2744 | { | ||
2745 | ScenePresence sp = m_scene.GetScenePresence(AttachedAvatar); | ||
2746 | if (sp != null) | ||
2747 | { | ||
2748 | sp.SendAttachmentUpdate(RootPart, UpdateRequired.TERSE); | ||
2749 | return; | ||
2750 | } | ||
2751 | } | ||
2752 | |||
2753 | RootPart.SendTerseUpdateToAllClients(); | 2743 | RootPart.SendTerseUpdateToAllClients(); |
2754 | } | 2744 | } |
2755 | 2745 | ||
@@ -2781,7 +2771,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2781 | 2771 | ||
2782 | SceneObjectPart[] parts = m_parts.GetArray(); | 2772 | SceneObjectPart[] parts = m_parts.GetArray(); |
2783 | for (int i = 0; i < parts.Length; i++) | 2773 | for (int i = 0; i < parts.Length; i++) |
2784 | parts[i].SendTerseUpdateToAllClients(); | 2774 | parts[i].SendTerseUpdateToAllClientsInternal(); |
2785 | } | 2775 | } |
2786 | 2776 | ||
2787 | /// <summary> | 2777 | /// <summary> |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 98ea880..0930820 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -862,7 +862,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
862 | { | 862 | { |
863 | Vector3 offset = (m_offsetPosition - oldpos); | 863 | Vector3 offset = (m_offsetPosition - oldpos); |
864 | av.AbsolutePosition += offset; | 864 | av.AbsolutePosition += offset; |
865 | av.SendAvatarDataToAllAgents(); | 865 | // av.SendAvatarDataToAllAgents(); |
866 | av.SendTerseUpdateToAllClients(); | ||
866 | } | 867 | } |
867 | } | 868 | } |
868 | } | 869 | } |
@@ -3257,7 +3258,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3257 | /// <summary> | 3258 | /// <summary> |
3258 | /// Send a full update for this part to all clients. | 3259 | /// Send a full update for this part to all clients. |
3259 | /// </summary> | 3260 | /// </summary> |
3260 | public void SendFullUpdateToAllClients() | 3261 | public void SendFullUpdateToAllClientsInternal() |
3261 | { | 3262 | { |
3262 | if (ParentGroup == null) | 3263 | if (ParentGroup == null) |
3263 | return; | 3264 | return; |
@@ -3276,6 +3277,36 @@ namespace OpenSim.Region.Framework.Scenes | |||
3276 | }); | 3277 | }); |
3277 | } | 3278 | } |
3278 | 3279 | ||
3280 | public void SendFullUpdateToAllClients() | ||
3281 | { | ||
3282 | if (ParentGroup == null) | ||
3283 | return; | ||
3284 | |||
3285 | // Update the "last" values | ||
3286 | m_lastPosition = OffsetPosition; | ||
3287 | m_lastRotation = RotationOffset; | ||
3288 | m_lastVelocity = Velocity; | ||
3289 | m_lastAcceleration = Acceleration; | ||
3290 | m_lastAngularVelocity = AngularVelocity; | ||
3291 | m_lastUpdateSentTime = Environment.TickCount; | ||
3292 | |||
3293 | if (ParentGroup.IsAttachment) | ||
3294 | { | ||
3295 | ScenePresence sp = ParentGroup.Scene.GetScenePresence(ParentGroup.AttachedAvatar); | ||
3296 | if (sp != null) | ||
3297 | { | ||
3298 | sp.SendAttachmentUpdate(this, UpdateRequired.FULL); | ||
3299 | } | ||
3300 | } | ||
3301 | else | ||
3302 | { | ||
3303 | ParentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) | ||
3304 | { | ||
3305 | SendFullUpdate(avatar.ControllingClient); | ||
3306 | }); | ||
3307 | } | ||
3308 | } | ||
3309 | |||
3279 | /// <summary> | 3310 | /// <summary> |
3280 | /// Sends a full update to the client | 3311 | /// Sends a full update to the client |
3281 | /// </summary> | 3312 | /// </summary> |
@@ -3345,24 +3376,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
3345 | !OffsetPosition.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || | 3376 | !OffsetPosition.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || |
3346 | Environment.TickCount - m_lastUpdateSentTime > TIME_MS_TOLERANCE) | 3377 | Environment.TickCount - m_lastUpdateSentTime > TIME_MS_TOLERANCE) |
3347 | { | 3378 | { |
3348 | SendTerseUpdateToAllClients(); | 3379 | SendTerseUpdateToAllClientsInternal(); |
3349 | |||
3350 | } | 3380 | } |
3351 | break; | 3381 | break; |
3352 | } | 3382 | } |
3353 | case UpdateRequired.FULL: | 3383 | case UpdateRequired.FULL: |
3354 | { | 3384 | { |
3355 | ClearUpdateSchedule(); | 3385 | ClearUpdateSchedule(); |
3356 | SendFullUpdateToAllClients(); | 3386 | SendFullUpdateToAllClientsInternal(); |
3357 | break; | 3387 | break; |
3358 | } | 3388 | } |
3359 | } | 3389 | } |
3360 | } | 3390 | } |
3361 | 3391 | ||
3392 | |||
3362 | /// <summary> | 3393 | /// <summary> |
3363 | /// Send a terse update to all clients | 3394 | /// Send a terse update to all clients |
3364 | /// </summary> | 3395 | /// </summary> |
3365 | public void SendTerseUpdateToAllClients() | 3396 | public void SendTerseUpdateToAllClientsInternal() |
3366 | { | 3397 | { |
3367 | if (ParentGroup == null || ParentGroup.Scene == null) | 3398 | if (ParentGroup == null || ParentGroup.Scene == null) |
3368 | return; | 3399 | return; |
@@ -3381,6 +3412,36 @@ namespace OpenSim.Region.Framework.Scenes | |||
3381 | }); | 3412 | }); |
3382 | } | 3413 | } |
3383 | 3414 | ||
3415 | public void SendTerseUpdateToAllClients() | ||
3416 | { | ||
3417 | if (ParentGroup == null || ParentGroup.Scene == null) | ||
3418 | return; | ||
3419 | |||
3420 | // Update the "last" values | ||
3421 | m_lastPosition = OffsetPosition; | ||
3422 | m_lastRotation = RotationOffset; | ||
3423 | m_lastVelocity = Velocity; | ||
3424 | m_lastAcceleration = Acceleration; | ||
3425 | m_lastAngularVelocity = AngularVelocity; | ||
3426 | m_lastUpdateSentTime = Environment.TickCount; | ||
3427 | |||
3428 | if (ParentGroup.IsAttachment) | ||
3429 | { | ||
3430 | ScenePresence sp = ParentGroup.Scene.GetScenePresence(ParentGroup.AttachedAvatar); | ||
3431 | if (sp != null) | ||
3432 | { | ||
3433 | sp.SendAttachmentUpdate(this, UpdateRequired.TERSE); | ||
3434 | } | ||
3435 | } | ||
3436 | else | ||
3437 | { | ||
3438 | ParentGroup.Scene.ForEachClient(delegate(IClientAPI client) | ||
3439 | { | ||
3440 | SendTerseUpdateToClient(client); | ||
3441 | }); | ||
3442 | } | ||
3443 | } | ||
3444 | |||
3384 | public void SetAxisRotation(int axis, int rotate) | 3445 | public void SetAxisRotation(int axis, int rotate) |
3385 | { | 3446 | { |
3386 | ParentGroup.SetAxisRotation(axis, rotate); | 3447 | ParentGroup.SetAxisRotation(axis, rotate); |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 5bfc640..faa07d4 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1341,6 +1341,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1341 | RemoveFromPhysicalScene(); | 1341 | RemoveFromPhysicalScene(); |
1342 | ParentID = 0; // Child agents can't be sitting | 1342 | ParentID = 0; // Child agents can't be sitting |
1343 | 1343 | ||
1344 | // we dont have land information for child | ||
1345 | m_previusParcelHide = false; | ||
1346 | m_previusParcelUUID = UUID.Zero; | ||
1347 | m_currentParcelHide = false; | ||
1348 | m_currentParcelUUID = UUID.Zero; | ||
1344 | // FIXME: Set RegionHandle to the region handle of the scene this agent is moving into | 1349 | // FIXME: Set RegionHandle to the region handle of the scene this agent is moving into |
1345 | 1350 | ||
1346 | m_scene.EventManager.TriggerOnMakeChildAgent(this); | 1351 | m_scene.EventManager.TriggerOnMakeChildAgent(this); |
@@ -1753,13 +1758,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1753 | // Tell the client that we're totally ready | 1758 | // Tell the client that we're totally ready |
1754 | ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look); | 1759 | ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look); |
1755 | 1760 | ||
1756 | // Remember in HandleUseCircuitCode, we delayed this to here | ||
1757 | // this prims etc, moved down | ||
1758 | // if (m_teleportFlags > 0) | ||
1759 | // SendInitialDataToMe(); | ||
1760 | |||
1761 | // m_log.DebugFormat("[SCENE PRESENCE] Completed movement"); | ||
1762 | |||
1763 | m_log.DebugFormat("[CompleteMovement] MoveAgentIntoRegion: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1761 | m_log.DebugFormat("[CompleteMovement] MoveAgentIntoRegion: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
1764 | 1762 | ||
1765 | if (!string.IsNullOrEmpty(m_callbackURI)) | 1763 | if (!string.IsNullOrEmpty(m_callbackURI)) |
@@ -1805,19 +1803,82 @@ namespace OpenSim.Region.Framework.Scenes | |||
1805 | if (!IsChildAgent) | 1803 | if (!IsChildAgent) |
1806 | { | 1804 | { |
1807 | 1805 | ||
1808 | ValidateAndSendAppearanceAndAgentData(); | 1806 | // ValidateAndSendAppearanceAndAgentData(); |
1807 | |||
1808 | // do it here in line | ||
1809 | // so sequence is clear | ||
1810 | |||
1811 | // verify baked textures and cache | ||
1812 | |||
1813 | bool cachedbaked = false; | ||
1814 | |||
1815 | if (m_scene.AvatarFactory != null) | ||
1816 | cachedbaked = m_scene.AvatarFactory.ValidateBakedTextureCache(this); | ||
1817 | |||
1818 | // not sure we need this | ||
1819 | if (!cachedbaked) | ||
1820 | { | ||
1821 | if (m_scene.AvatarFactory != null) | ||
1822 | m_scene.AvatarFactory.QueueAppearanceSave(UUID); | ||
1823 | } | ||
1824 | |||
1825 | List<ScenePresence> allpresences = m_scene.GetScenePresences(); | ||
1826 | |||
1827 | // send avatar object to all presences including us, so they cross it into region | ||
1828 | // then hide if necessary | ||
1829 | SendInitialAvatarDataToAllAgents(allpresences); | ||
1830 | |||
1831 | // send this look | ||
1832 | SendAppearanceToAgent(this); | ||
1833 | |||
1834 | // send this animations | ||
1835 | UUID[] animIDs = null; | ||
1836 | int[] animseqs = null; | ||
1837 | UUID[] animsobjs = null; | ||
1838 | |||
1839 | if (Animator != null) | ||
1840 | Animator.GetArrays(out animIDs, out animseqs, out animsobjs); | ||
1841 | |||
1842 | bool haveAnims = (animIDs != null && animseqs != null && animsobjs != null); | ||
1843 | |||
1844 | if(haveAnims) | ||
1845 | SendAnimPackToAgent(this, animIDs, animseqs, animsobjs); | ||
1846 | |||
1847 | // we should be able to receive updates, etc | ||
1848 | // so release them | ||
1849 | m_inTransit = false; | ||
1850 | |||
1851 | // send look and animations to others | ||
1852 | // if not cached we send greys | ||
1853 | // uncomented if will wait till avatar does baking | ||
1854 | //if (cachedbaked) | ||
1855 | { | ||
1856 | foreach (ScenePresence p in allpresences) | ||
1857 | { | ||
1858 | if (p == this) | ||
1859 | continue; | ||
1860 | |||
1861 | if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) | ||
1862 | continue; | ||
1863 | |||
1864 | SendAppearanceToAgentNF(p); | ||
1865 | if (haveAnims) | ||
1866 | SendAnimPackToAgentNF(p, animIDs, animseqs, animsobjs); | ||
1867 | } | ||
1868 | } // greys if | ||
1809 | 1869 | ||
1810 | m_log.DebugFormat("[CompleteMovement] ValidateAndSendAppearanceAndAgentData: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1870 | m_log.DebugFormat("[CompleteMovement] ValidateAndSendAppearanceAndAgentData: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
1811 | 1871 | ||
1812 | // attachments | 1872 | // attachments |
1873 | |||
1813 | if (isNPC || (TeleportFlags & TeleportFlags.ViaLogin) != 0) | 1874 | if (isNPC || (TeleportFlags & TeleportFlags.ViaLogin) != 0) |
1814 | { | 1875 | { |
1815 | if (Scene.AttachmentsModule != null) | 1876 | if (Scene.AttachmentsModule != null) |
1816 | // Util.FireAndForget( | 1877 | // Util.FireAndForget( |
1817 | // o => | 1878 | // o => |
1818 | // { | 1879 | // { |
1819 | Scene.AttachmentsModule.RezAttachments(this); | 1880 | Scene.AttachmentsModule.RezAttachments(this); |
1820 | // }); | 1881 | // }); |
1821 | } | 1882 | } |
1822 | else | 1883 | else |
1823 | { | 1884 | { |
@@ -1829,23 +1890,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
1829 | // Resume scripts this possible should also be moved down after sending the avatar to viewer ? | 1890 | // Resume scripts this possible should also be moved down after sending the avatar to viewer ? |
1830 | foreach (SceneObjectGroup sog in m_attachments) | 1891 | foreach (SceneObjectGroup sog in m_attachments) |
1831 | { | 1892 | { |
1832 | sog.SendFullUpdateToClient(ControllingClient); | ||
1833 | SendFullUpdateToClient(ControllingClient); | 1893 | SendFullUpdateToClient(ControllingClient); |
1894 | sog.SendFullUpdateToClient(ControllingClient); | ||
1834 | 1895 | ||
1835 | if (!sog.HasPrivateAttachmentPoint) | 1896 | if (!sog.HasPrivateAttachmentPoint) |
1836 | { | 1897 | { |
1837 | // sog.ScheduleGroupForFullUpdate(); | 1898 | // sog.ScheduleGroupForFullUpdate(); |
1838 | m_scene.ForEachScenePresence(delegate(ScenePresence p) | 1899 | foreach(ScenePresence p in allpresences) |
1839 | { | 1900 | { |
1840 | if (p == this) | 1901 | if (p == this) |
1841 | return; | 1902 | continue; |
1842 | 1903 | ||
1843 | if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) | 1904 | if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |
1844 | return; | 1905 | continue; |
1845 | 1906 | ||
1846 | sog.SendFullUpdateToClient(p.ControllingClient); | ||
1847 | SendFullUpdateToClient(p.ControllingClient); // resend our data by updates path | 1907 | SendFullUpdateToClient(p.ControllingClient); // resend our data by updates path |
1848 | }); | 1908 | sog.SendFullUpdateToClient(p.ControllingClient); |
1909 | }; | ||
1849 | } | 1910 | } |
1850 | sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource()); | 1911 | sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource()); |
1851 | sog.ResumeScripts(); | 1912 | sog.ResumeScripts(); |
@@ -1872,25 +1933,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
1872 | 1933 | ||
1873 | m_log.DebugFormat("[CompleteMovement] SendInitialDataToMe: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1934 | m_log.DebugFormat("[CompleteMovement] SendInitialDataToMe: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
1874 | 1935 | ||
1875 | if (!IsChildAgent) | 1936 | if (!IsChildAgent && openChildAgents) |
1876 | { | 1937 | { |
1877 | // moved from makeroot missing in sendInitialDataToMe | ||
1878 | // its already there | ||
1879 | /* | ||
1880 | m_scene.ForEachRootScenePresence(delegate(ScenePresence presence) | ||
1881 | { | ||
1882 | if (presence != this) | ||
1883 | presence.Animator.SendAnimPackToClient(ControllingClient); | ||
1884 | }); | ||
1885 | */ | ||
1886 | if (openChildAgents) | ||
1887 | { | ||
1888 | IFriendsModule friendsModule = m_scene.RequestModuleInterface<IFriendsModule>(); | 1938 | IFriendsModule friendsModule = m_scene.RequestModuleInterface<IFriendsModule>(); |
1889 | if (friendsModule != null) | 1939 | if (friendsModule != null) |
1890 | friendsModule.SendFriendsOnlineIfNeeded(ControllingClient); | 1940 | friendsModule.SendFriendsOnlineIfNeeded(ControllingClient); |
1891 | 1941 | ||
1892 | m_log.DebugFormat("[CompleteMovement] friendsModule: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1942 | m_log.DebugFormat("[CompleteMovement] friendsModule: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
1893 | } | 1943 | |
1894 | } | 1944 | } |
1895 | } | 1945 | } |
1896 | finally | 1946 | finally |
@@ -3481,6 +3531,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
3481 | /// Do everything required once a client completes its movement into a region and becomes | 3531 | /// Do everything required once a client completes its movement into a region and becomes |
3482 | /// a root agent. | 3532 | /// a root agent. |
3483 | /// </summary> | 3533 | /// </summary> |
3534 | /// | ||
3535 | /* only called from on place, do done inline there | ||
3484 | private void ValidateAndSendAppearanceAndAgentData() | 3536 | private void ValidateAndSendAppearanceAndAgentData() |
3485 | { | 3537 | { |
3486 | //m_log.DebugFormat("[SCENE PRESENCE] SendInitialData: {0} ({1})", Name, UUID); | 3538 | //m_log.DebugFormat("[SCENE PRESENCE] SendInitialData: {0} ({1})", Name, UUID); |
@@ -3502,11 +3554,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
3502 | m_scene.AvatarFactory.QueueAppearanceSave(UUID); | 3554 | m_scene.AvatarFactory.QueueAppearanceSave(UUID); |
3503 | } | 3555 | } |
3504 | 3556 | ||
3557 | // send avatar object to all viewers so they cross it into region | ||
3505 | bool newhide = m_currentParcelHide; | 3558 | bool newhide = m_currentParcelHide; |
3506 | m_currentParcelHide = false; | 3559 | m_currentParcelHide = false; |
3507 | 3560 | ||
3508 | SendAvatarDataToAllAgents(); | 3561 | SendAvatarDataToAllAgents(); |
3509 | 3562 | ||
3563 | // now hide | ||
3510 | if (newhide) | 3564 | if (newhide) |
3511 | { | 3565 | { |
3512 | ParcelLoginCheck(m_currentParcelUUID); | 3566 | ParcelLoginCheck(m_currentParcelUUID); |
@@ -3522,7 +3576,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3522 | if(Animator!= null) | 3576 | if(Animator!= null) |
3523 | Animator.SendAnimPack(); | 3577 | Animator.SendAnimPack(); |
3524 | } | 3578 | } |
3525 | 3579 | */ | |
3526 | /// <summary> | 3580 | /// <summary> |
3527 | /// Send avatar full data appearance and animations for all other root agents to this agent, this agent | 3581 | /// Send avatar full data appearance and animations for all other root agents to this agent, this agent |
3528 | /// can be either a child or root | 3582 | /// can be either a child or root |
@@ -3530,15 +3584,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
3530 | public void SendOtherAgentsAvatarFullToMe() | 3584 | public void SendOtherAgentsAvatarFullToMe() |
3531 | { | 3585 | { |
3532 | int count = 0; | 3586 | int count = 0; |
3533 | m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence) | 3587 | m_scene.ForEachRootScenePresence(delegate(ScenePresence p) |
3534 | { | 3588 | { |
3535 | // only send information about other root agents | 3589 | // only send information about other root agents |
3536 | if (scenePresence.UUID == UUID) | 3590 | if (p.UUID == UUID) |
3537 | return; | 3591 | return; |
3538 | 3592 | ||
3539 | scenePresence.SendAvatarDataToAgent(this); | 3593 | if (p.ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && GodLevel < 200) |
3540 | scenePresence.SendAppearanceToAgent(this); | 3594 | return; |
3541 | scenePresence.SendAnimPackToAgent(this); | 3595 | |
3596 | p.SendAvatarDataToAgentNF(this); | ||
3597 | p.SendAppearanceToAgentNF(this); | ||
3598 | p.SendAnimPackToAgentNF(this); | ||
3542 | // for now attachments are sent with all SOG | 3599 | // for now attachments are sent with all SOG |
3543 | count++; | 3600 | count++; |
3544 | }); | 3601 | }); |
@@ -3559,7 +3616,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3559 | m_log.WarnFormat( | 3616 | m_log.WarnFormat( |
3560 | "[SCENE PRESENCE]: Attempt to send avatar data from a child agent for {0} in {1}", | 3617 | "[SCENE PRESENCE]: Attempt to send avatar data from a child agent for {0} in {1}", |
3561 | Name, Scene.RegionInfo.RegionName); | 3618 | Name, Scene.RegionInfo.RegionName); |
3562 | |||
3563 | return; | 3619 | return; |
3564 | } | 3620 | } |
3565 | 3621 | ||
@@ -3575,6 +3631,26 @@ namespace OpenSim.Region.Framework.Scenes | |||
3575 | m_scene.StatsReporter.AddAgentUpdates(count); | 3631 | m_scene.StatsReporter.AddAgentUpdates(count); |
3576 | } | 3632 | } |
3577 | 3633 | ||
3634 | // sends avatar object to all clients so they cross it into region | ||
3635 | // then sends kills to hide | ||
3636 | public void SendInitialAvatarDataToAllAgents(List<ScenePresence> presences) | ||
3637 | { | ||
3638 | m_lastSize = Appearance.AvatarSize; | ||
3639 | int count = 0; | ||
3640 | |||
3641 | foreach (ScenePresence p in presences) | ||
3642 | { | ||
3643 | p.ControllingClient.SendAvatarDataImmediate(this); | ||
3644 | if (p != this && ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) | ||
3645 | // either just kill the object | ||
3646 | // p.ControllingClient.SendKillObject(new List<uint> {LocalId}); | ||
3647 | // or also attachments viewer may still know about | ||
3648 | SendKillTo(p); | ||
3649 | count++; | ||
3650 | } | ||
3651 | m_scene.StatsReporter.AddAgentUpdates(count); | ||
3652 | } | ||
3653 | |||
3578 | /// <summary> | 3654 | /// <summary> |
3579 | /// Send avatar data to an agent. | 3655 | /// Send avatar data to an agent. |
3580 | /// </summary> | 3656 | /// </summary> |
@@ -3589,9 +3665,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3589 | 3665 | ||
3590 | public void SendAvatarDataToAgentNF(ScenePresence avatar) | 3666 | public void SendAvatarDataToAgentNF(ScenePresence avatar) |
3591 | { | 3667 | { |
3592 | avatar.ControllingClient.SendAvatarDataImmediate(this); | 3668 | avatar.ControllingClient.SendAvatarDataImmediate(this); |
3593 | } | 3669 | } |
3594 | 3670 | ||
3595 | /// <summary> | 3671 | /// <summary> |
3596 | /// Send this agent's appearance to all other root and child agents in the scene | 3672 | /// Send this agent's appearance to all other root and child agents in the scene |
3597 | /// This agent must be root. | 3673 | /// This agent must be root. |
@@ -3637,6 +3713,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
3637 | UUID, Appearance.VisualParams, Appearance.Texture.GetBytes()); | 3713 | UUID, Appearance.VisualParams, Appearance.Texture.GetBytes()); |
3638 | } | 3714 | } |
3639 | 3715 | ||
3716 | public void SendAppearanceToAgentNF(ScenePresence avatar) | ||
3717 | { | ||
3718 | avatar.ControllingClient.SendAppearance( | ||
3719 | UUID, Appearance.VisualParams, Appearance.Texture.GetBytes()); | ||
3720 | } | ||
3721 | |||
3640 | public void SendAnimPackToAgent(ScenePresence p) | 3722 | public void SendAnimPackToAgent(ScenePresence p) |
3641 | { | 3723 | { |
3642 | if (IsChildAgent || Animator == null) | 3724 | if (IsChildAgent || Animator == null) |
@@ -3648,6 +3730,29 @@ namespace OpenSim.Region.Framework.Scenes | |||
3648 | Animator.SendAnimPackToClient(p.ControllingClient); | 3730 | Animator.SendAnimPackToClient(p.ControllingClient); |
3649 | } | 3731 | } |
3650 | 3732 | ||
3733 | public void SendAnimPackToAgent(ScenePresence p, UUID[] animations, int[] seqs, UUID[] objectIDs) | ||
3734 | { | ||
3735 | if (IsChildAgent) | ||
3736 | return; | ||
3737 | |||
3738 | if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) | ||
3739 | return; | ||
3740 | |||
3741 | p.ControllingClient.SendAnimations(animations, seqs, ControllingClient.AgentId, objectIDs); | ||
3742 | } | ||
3743 | |||
3744 | public void SendAnimPackToAgentNF(ScenePresence p) | ||
3745 | { | ||
3746 | if (IsChildAgent || Animator == null) | ||
3747 | return; | ||
3748 | Animator.SendAnimPackToClient(p.ControllingClient); | ||
3749 | } | ||
3750 | |||
3751 | public void SendAnimPackToAgentNF(ScenePresence p, UUID[] animations, int[] seqs, UUID[] objectIDs) | ||
3752 | { | ||
3753 | p.ControllingClient.SendAnimations(animations, seqs, ControllingClient.AgentId, objectIDs); | ||
3754 | } | ||
3755 | |||
3651 | public void SendAnimPack(UUID[] animations, int[] seqs, UUID[] objectIDs) | 3756 | public void SendAnimPack(UUID[] animations, int[] seqs, UUID[] objectIDs) |
3652 | { | 3757 | { |
3653 | if (IsChildAgent) | 3758 | if (IsChildAgent) |
@@ -5634,22 +5739,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
5634 | } | 5739 | } |
5635 | } | 5740 | } |
5636 | 5741 | ||
5637 | private void ParcelLoginCheck(UUID currentParcelID) | ||
5638 | { | ||
5639 | List<ScenePresence> allpresences = m_scene.GetScenePresences(); | ||
5640 | |||
5641 | foreach (ScenePresence p in allpresences) | ||
5642 | { | ||
5643 | if (p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive) | ||
5644 | continue; | ||
5645 | |||
5646 | if (currentParcelID != p.currentParcelUUID && p.GodLevel < 200) | ||
5647 | { | ||
5648 | SendKillTo(p); | ||
5649 | } | ||
5650 | } | ||
5651 | } | ||
5652 | |||
5653 | public void parcelRegionCross() | 5742 | public void parcelRegionCross() |
5654 | { | 5743 | { |
5655 | if (!ParcelHideThisAvatar || GodLevel >= 200) | 5744 | if (!ParcelHideThisAvatar || GodLevel >= 200) |
@@ -5817,8 +5906,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
5817 | 5906 | ||
5818 | if (killsToSendme.Count > 0) | 5907 | if (killsToSendme.Count > 0) |
5819 | { | 5908 | { |
5820 | m_log.Debug("[AVATAR]: killtoMe: " + Lastname + " " + killsToSendme.Count.ToString()); | ||
5821 | |||
5822 | foreach (ScenePresence p in killsToSendme) | 5909 | foreach (ScenePresence p in killsToSendme) |
5823 | { | 5910 | { |
5824 | m_log.Debug("[AVATAR]: killToMe: " + Lastname + " " + p.Lastname); | 5911 | m_log.Debug("[AVATAR]: killToMe: " + Lastname + " " + p.Lastname); |