diff options
author | diva | 2009-02-17 00:35:52 +0000 |
---|---|---|
committer | diva | 2009-02-17 00:35:52 +0000 |
commit | 7cc906213795fbe4878c0cfb8351272e847617e9 (patch) | |
tree | 861e1562c10feb985e2e04536d1268f993761ab6 /OpenSim/Region | |
parent | cleanup (diff) | |
download | opensim-SC-7cc906213795fbe4878c0cfb8351272e847617e9.zip opensim-SC-7cc906213795fbe4878c0cfb8351272e847617e9.tar.gz opensim-SC-7cc906213795fbe4878c0cfb8351272e847617e9.tar.bz2 opensim-SC-7cc906213795fbe4878c0cfb8351272e847617e9.tar.xz |
Major change to how appearance is managed, including changes in login and user service/server. Appearance is now sent by the user service/server along with all other loginparams. Regions don't query the user service for appearance anymore. The appearance is passed along from region to region as the avie moves around. And, as before, it's stored back with the user service as the client changes the avie's appearance. Child agents have default appearances that are set to the actual appearance when the avie moves to that region. (as before, child agents are invisible and non-physical).
Diffstat (limited to 'OpenSim/Region')
5 files changed, 102 insertions, 29 deletions
diff --git a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs index 5df3c34..7ca29ca 100644 --- a/OpenSim/Region/Communications/Local/LocalBackEndServices.cs +++ b/OpenSim/Region/Communications/Local/LocalBackEndServices.cs | |||
@@ -441,6 +441,13 @@ namespace OpenSim.Region.Communications.Local | |||
441 | agent.InventoryFolder = loginData.InventoryFolder; | 441 | agent.InventoryFolder = loginData.InventoryFolder; |
442 | agent.startpos = loginData.StartPos; | 442 | agent.startpos = loginData.StartPos; |
443 | agent.CapsPath = loginData.CapsPath; | 443 | agent.CapsPath = loginData.CapsPath; |
444 | if (agent.Appearance != null) | ||
445 | agent.Appearance = loginData.Appearance; | ||
446 | else | ||
447 | { | ||
448 | m_log.WarnFormat("[INTER]: Appearance not found for {0} {1}. Creating default.", agent.firstname, agent.lastname); | ||
449 | agent.Appearance = new AvatarAppearance(); | ||
450 | } | ||
444 | 451 | ||
445 | TriggerExpectUser(regionHandle, agent); | 452 | TriggerExpectUser(regionHandle, agent); |
446 | } | 453 | } |
diff --git a/OpenSim/Region/Communications/Local/LocalLoginService.cs b/OpenSim/Region/Communications/Local/LocalLoginService.cs index 5de812c..4e0ed13 100644 --- a/OpenSim/Region/Communications/Local/LocalLoginService.cs +++ b/OpenSim/Region/Communications/Local/LocalLoginService.cs | |||
@@ -359,6 +359,9 @@ namespace OpenSim.Region.Communications.Local | |||
359 | loginParams.StartPos = user.CurrentAgent.Position; | 359 | loginParams.StartPos = user.CurrentAgent.Position; |
360 | loginParams.CapsPath = capsPath; | 360 | loginParams.CapsPath = capsPath; |
361 | 361 | ||
362 | // Appearance | ||
363 | loginParams.Appearance = m_userManager.GetUserAppearance(user.ID); | ||
364 | |||
362 | if (m_gridService.RegionLoginsEnabled) | 365 | if (m_gridService.RegionLoginsEnabled) |
363 | { | 366 | { |
364 | handlerLoginToRegion = OnLoginToRegion; | 367 | handlerLoginToRegion = OnLoginToRegion; |
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs index 0ec19a8..1da7621 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs | |||
@@ -610,9 +610,13 @@ namespace OpenSim.Region.Communications.OGS1 | |||
610 | agentData.lastname = (string) requestData["lastname"]; | 610 | agentData.lastname = (string) requestData["lastname"]; |
611 | agentData.AgentID = new UUID((string) requestData["agent_id"]); | 611 | agentData.AgentID = new UUID((string) requestData["agent_id"]); |
612 | agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); | 612 | agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); |
613 | agentData.CapsPath = (string) requestData["caps_path"]; | 613 | agentData.CapsPath = (string)requestData["caps_path"]; |
614 | ulong regionHandle = Convert.ToUInt64((string) requestData["regionhandle"]); | 614 | ulong regionHandle = Convert.ToUInt64((string) requestData["regionhandle"]); |
615 | 615 | ||
616 | // Appearance | ||
617 | if (requestData["appearance"] != null) | ||
618 | agentData.Appearance = new AvatarAppearance((Hashtable)requestData["appearance"]); | ||
619 | |||
616 | m_log.DebugFormat( | 620 | m_log.DebugFormat( |
617 | "[CLIENT]: Told by user service to prepare for a connection from {0} {1} {2}, circuit {3}", | 621 | "[CLIENT]: Told by user service to prepare for a connection from {0} {1} {2}, circuit {3}", |
618 | agentData.firstname, agentData.lastname, agentData.AgentID, agentData.circuitcode); | 622 | agentData.firstname, agentData.lastname, agentData.AgentID, agentData.circuitcode); |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index c3ab5e9..5badd2d 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -2089,8 +2089,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2089 | /// <returns></returns> | 2089 | /// <returns></returns> |
2090 | protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client) | 2090 | protected virtual ScenePresence CreateAndAddScenePresence(IClientAPI client) |
2091 | { | 2091 | { |
2092 | AvatarAppearance appearance = new AvatarAppearance(); | 2092 | AvatarAppearance appearance = null; |
2093 | //GetAvatarAppearance(client, out appearance); | 2093 | GetAvatarAppearance(client, out appearance); |
2094 | 2094 | ||
2095 | ScenePresence avatar = m_sceneGraph.CreateAndAddChildScenePresence(client, appearance); | 2095 | ScenePresence avatar = m_sceneGraph.CreateAndAddChildScenePresence(client, appearance); |
2096 | //avatar.KnownRegions = GetChildrenSeeds(avatar.UUID); | 2096 | //avatar.KnownRegions = GetChildrenSeeds(avatar.UUID); |
@@ -2104,23 +2104,29 @@ namespace OpenSim.Region.Framework.Scenes | |||
2104 | /// <param name="appearance"></param> | 2104 | /// <param name="appearance"></param> |
2105 | public void GetAvatarAppearance(IClientAPI client, out AvatarAppearance appearance) | 2105 | public void GetAvatarAppearance(IClientAPI client, out AvatarAppearance appearance) |
2106 | { | 2106 | { |
2107 | appearance = new AvatarAppearance(); | 2107 | AgentCircuitData aCircuit = m_authenticateHandler.GetAgentCircuitData(client.CircuitCode); |
2108 | 2108 | appearance = aCircuit.Appearance; | |
2109 | try | 2109 | if (appearance == null) |
2110 | { | ||
2111 | if (m_AvatarFactory != null) | ||
2112 | { | ||
2113 | if (m_AvatarFactory.TryGetAvatarAppearance(client.AgentId, out appearance)) | ||
2114 | return; | ||
2115 | } | ||
2116 | } | ||
2117 | catch (Exception e) | ||
2118 | { | 2110 | { |
2119 | m_log.ErrorFormat("[APPEARANCE]: Problem fetching appearance for avatar {0}, {1}", | 2111 | m_log.DebugFormat("[APPEARANCE]: Appearance not found in {0}, returning default", RegionInfo.RegionName); |
2120 | client.Name, e); | 2112 | appearance = new AvatarAppearance(); |
2121 | } | 2113 | } |
2122 | 2114 | ||
2123 | m_log.Warn("[APPEARANCE]: Appearance not found, returning default"); | 2115 | //try |
2116 | //{ | ||
2117 | // if (m_AvatarFactory != null) | ||
2118 | // { | ||
2119 | // if (m_AvatarFactory.TryGetAvatarAppearance(client.AgentId, out appearance)) | ||
2120 | // return; | ||
2121 | // } | ||
2122 | //} | ||
2123 | //catch (Exception e) | ||
2124 | //{ | ||
2125 | // m_log.ErrorFormat("[APPEARANCE]: Problem fetching appearance for avatar {0}, {1}", | ||
2126 | // client.Name, e); | ||
2127 | //} | ||
2128 | |||
2129 | //m_log.Warn("[APPEARANCE]: Appearance not found, returning default"); | ||
2124 | } | 2130 | } |
2125 | 2131 | ||
2126 | /// <summary> | 2132 | /// <summary> |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 42a429d..f06afc0 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -816,14 +816,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
816 | // Moved this from SendInitialData to ensure that m_appearance is initialized | 816 | // Moved this from SendInitialData to ensure that m_appearance is initialized |
817 | // before the inventory is processed in MakeRootAgent. This fixes a race condition | 817 | // before the inventory is processed in MakeRootAgent. This fixes a race condition |
818 | // related to the handling of attachments | 818 | // related to the handling of attachments |
819 | m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance); | 819 | //m_scene.GetAvatarAppearance(m_controllingClient, out m_appearance); |
820 | 820 | ||
821 | if (pos.X < 0 || pos.X > Constants.RegionSize || pos.Y < 0 || pos.Y > Constants.RegionSize || pos.Z < 0) | 821 | if (pos.X < 0 || pos.X > Constants.RegionSize || pos.Y < 0 || pos.Y > Constants.RegionSize || pos.Z < 0) |
822 | { | 822 | { |
823 | Vector3 emergencyPos = new Vector3(128, 128, 128); | 823 | Vector3 emergencyPos = new Vector3(128, 128, 128); |
824 | 824 | ||
825 | m_log.WarnFormat( | 825 | m_log.WarnFormat( |
826 | "[SCENE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", | 826 | "[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", |
827 | pos, Name, UUID, emergencyPos); | 827 | pos, Name, UUID, emergencyPos); |
828 | 828 | ||
829 | pos = emergencyPos; | 829 | pos = emergencyPos; |
@@ -845,8 +845,17 @@ namespace OpenSim.Region.Framework.Scenes | |||
845 | AbsolutePosition = pos; | 845 | AbsolutePosition = pos; |
846 | 846 | ||
847 | AddToPhysicalScene(isFlying); | 847 | AddToPhysicalScene(isFlying); |
848 | if ((m_appearance != null) && (m_appearance.AvatarHeight > 0)) | 848 | if (m_appearance != null) |
849 | SetHeight(m_appearance.AvatarHeight); | 849 | { |
850 | if (m_appearance.AvatarHeight > 0) | ||
851 | SetHeight(m_appearance.AvatarHeight); | ||
852 | } | ||
853 | else | ||
854 | { | ||
855 | m_log.ErrorFormat("[SCENE PRESENCE]: null appearance in MakeRoot in {0}", Scene.RegionInfo.RegionName); | ||
856 | // emergency; this really shouldn't happen | ||
857 | m_appearance = new AvatarAppearance(); | ||
858 | } | ||
850 | 859 | ||
851 | // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying | 860 | // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying |
852 | // avatar to return to the standing position in mid-air. On login it looks like this is being sent | 861 | // avatar to return to the standing position in mid-air. On login it looks like this is being sent |
@@ -2573,7 +2582,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2573 | cAgent.Position = m_pos; | 2582 | cAgent.Position = m_pos; |
2574 | cAgent.Velocity = m_velocity; | 2583 | cAgent.Velocity = m_velocity; |
2575 | cAgent.Center = m_CameraCenter; | 2584 | cAgent.Center = m_CameraCenter; |
2576 | cAgent.Size = new Vector3(0, 0, m_avHeight); | 2585 | // Don't copy the size; it is inferred from apearance parameters |
2586 | //cAgent.Size = new Vector3(0, 0, m_avHeight); | ||
2577 | cAgent.AtAxis = m_CameraAtAxis; | 2587 | cAgent.AtAxis = m_CameraAtAxis; |
2578 | cAgent.LeftAxis = m_CameraLeftAxis; | 2588 | cAgent.LeftAxis = m_CameraLeftAxis; |
2579 | cAgent.UpAxis = m_CameraUpAxis; | 2589 | cAgent.UpAxis = m_CameraUpAxis; |
@@ -2605,13 +2615,37 @@ namespace OpenSim.Region.Framework.Scenes | |||
2605 | 2615 | ||
2606 | cAgent.AlwaysRun = m_setAlwaysRun; | 2616 | cAgent.AlwaysRun = m_setAlwaysRun; |
2607 | 2617 | ||
2608 | //cAgent.AgentTextures = ??? | ||
2609 | //cAgent.GroupID = ?? | 2618 | //cAgent.GroupID = ?? |
2610 | // Groups??? | 2619 | // Groups??? |
2611 | 2620 | ||
2612 | // Animations??? | 2621 | // Animations??? |
2613 | 2622 | ||
2614 | cAgent.VisualParams = m_appearance.VisualParams; | 2623 | try |
2624 | { | ||
2625 | int i = 0; | ||
2626 | UUID[] textures = new UUID[m_appearance.Wearables.Length * 2]; | ||
2627 | foreach (AvatarWearable aw in m_appearance.Wearables) | ||
2628 | { | ||
2629 | if (aw != null) | ||
2630 | { | ||
2631 | textures[i++] = aw.ItemID; | ||
2632 | textures[i++] = aw.AssetID; | ||
2633 | } | ||
2634 | else | ||
2635 | m_log.DebugFormat("[SCENE PRESENCE]: Null wearable in CopyTo"); | ||
2636 | } | ||
2637 | cAgent.AgentTextures = textures; | ||
2638 | cAgent.VisualParams = m_appearance.VisualParams; | ||
2639 | } | ||
2640 | catch (Exception e) | ||
2641 | { | ||
2642 | m_log.Warn("[SCENE PRESENCE]: exception in CopyTo " + e.Message); | ||
2643 | } | ||
2644 | //cAgent.GroupID = ?? | ||
2645 | // Groups??? | ||
2646 | |||
2647 | // Animations??? | ||
2648 | |||
2615 | } | 2649 | } |
2616 | 2650 | ||
2617 | public void CopyFrom(AgentData cAgent) | 2651 | public void CopyFrom(AgentData cAgent) |
@@ -2622,7 +2656,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2622 | m_pos = cAgent.Position; | 2656 | m_pos = cAgent.Position; |
2623 | m_velocity = cAgent.Velocity; | 2657 | m_velocity = cAgent.Velocity; |
2624 | m_CameraCenter = cAgent.Center; | 2658 | m_CameraCenter = cAgent.Center; |
2625 | m_avHeight = cAgent.Size.Z; | 2659 | //m_avHeight = cAgent.Size.Z; |
2626 | m_CameraAtAxis = cAgent.AtAxis; | 2660 | m_CameraAtAxis = cAgent.AtAxis; |
2627 | m_CameraLeftAxis = cAgent.LeftAxis; | 2661 | m_CameraLeftAxis = cAgent.LeftAxis; |
2628 | m_CameraUpAxis = cAgent.UpAxis; | 2662 | m_CameraUpAxis = cAgent.UpAxis; |
@@ -2634,20 +2668,39 @@ namespace OpenSim.Region.Framework.Scenes | |||
2634 | 2668 | ||
2635 | m_headrotation = cAgent.HeadRotation; | 2669 | m_headrotation = cAgent.HeadRotation; |
2636 | m_bodyRot = cAgent.BodyRotation; | 2670 | m_bodyRot = cAgent.BodyRotation; |
2637 | m_AgentControlFlags = cAgent.ControlFlags; // We need more flags! | 2671 | m_AgentControlFlags = cAgent.ControlFlags; |
2638 | 2672 | ||
2639 | if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID))) | 2673 | if (m_scene.Permissions.IsGod(new UUID(cAgent.AgentID))) |
2640 | m_godlevel = cAgent.GodLevel; | 2674 | m_godlevel = cAgent.GodLevel; |
2641 | m_setAlwaysRun = cAgent.AlwaysRun; | 2675 | m_setAlwaysRun = cAgent.AlwaysRun; |
2642 | 2676 | ||
2643 | //cAgent.AgentTextures = ??? | 2677 | uint i = 0; |
2678 | AvatarWearable[] wearables = new AvatarWearable[cAgent.AgentTextures.Length / 2]; | ||
2679 | Primitive.TextureEntry te = new Primitive.TextureEntry(UUID.Random()); | ||
2680 | try | ||
2681 | { | ||
2682 | for (uint n = 0; n < cAgent.AgentTextures.Length; n += 2) | ||
2683 | { | ||
2684 | UUID itemId = cAgent.AgentTextures[n]; | ||
2685 | UUID assetId = cAgent.AgentTextures[n + 1]; | ||
2686 | wearables[i] = new AvatarWearable(itemId, assetId); | ||
2687 | te.CreateFace(i++).TextureID = assetId; | ||
2688 | } | ||
2689 | } | ||
2690 | catch (Exception e) | ||
2691 | { | ||
2692 | m_log.Warn("[SCENE PRESENCE]: exception in CopyFrom " + e.Message); | ||
2693 | } | ||
2694 | //m_appearance.Texture = te; | ||
2695 | m_appearance.Wearables = wearables; | ||
2696 | //m_appearance.VisualParams = cAgent.VisualParams; | ||
2697 | m_appearance.SetAppearance(te.ToBytes(), new List<byte>(cAgent.VisualParams)); | ||
2644 | 2698 | ||
2645 | //cAgent.GroupID = ?? | 2699 | //cAgent.GroupID = ?? |
2646 | //Groups??? | 2700 | //Groups??? |
2647 | 2701 | ||
2648 | // Animations??? | 2702 | // Animations??? |
2649 | 2703 | ||
2650 | m_appearance.VisualParams = cAgent.VisualParams; | ||
2651 | } | 2704 | } |
2652 | 2705 | ||
2653 | #endregion Child Agent Updates | 2706 | #endregion Child Agent Updates |