diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
9 files changed, 236 insertions, 49 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 1309623..863aa49 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -93,7 +93,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
93 | /// </summary> | 93 | /// </summary> |
94 | public void StartScripts() | 94 | public void StartScripts() |
95 | { | 95 | { |
96 | m_log.InfoFormat("[SCENE]: Starting scripts in {0}, please wait.", RegionInfo.RegionName); | 96 | // m_log.InfoFormat("[SCENE]: Starting scripts in {0}, please wait.", RegionInfo.RegionName); |
97 | 97 | ||
98 | IScriptModule[] engines = RequestModuleInterfaces<IScriptModule>(); | 98 | IScriptModule[] engines = RequestModuleInterfaces<IScriptModule>(); |
99 | 99 | ||
@@ -1986,6 +1986,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1986 | // If child prims have invalid perms, fix them | 1986 | // If child prims have invalid perms, fix them |
1987 | grp.AdjustChildPrimPermissions(); | 1987 | grp.AdjustChildPrimPermissions(); |
1988 | 1988 | ||
1989 | // If child prims have invalid perms, fix them | ||
1990 | grp.AdjustChildPrimPermissions(); | ||
1991 | |||
1989 | if (remoteClient == null) | 1992 | if (remoteClient == null) |
1990 | { | 1993 | { |
1991 | // Autoreturn has a null client. Nothing else does. So | 1994 | // Autoreturn has a null client. Nothing else does. So |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index e970543..16c0d25 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | |||
@@ -543,7 +543,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
543 | if (!InventoryService.AddFolder(folder)) | 543 | if (!InventoryService.AddFolder(folder)) |
544 | { | 544 | { |
545 | m_log.WarnFormat( | 545 | m_log.WarnFormat( |
546 | "[AGENT INVENTORY]: Failed to move create folder for user {0} {1}", | 546 | "[AGENT INVENTORY]: Failed to create folder for user {0} {1}", |
547 | remoteClient.Name, remoteClient.AgentId); | 547 | remoteClient.Name, remoteClient.AgentId); |
548 | } | 548 | } |
549 | } | 549 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 0237021..8fb6c3b 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -103,8 +103,26 @@ namespace OpenSim.Region.Framework.Scenes | |||
103 | /// </summary> | 103 | /// </summary> |
104 | public bool CollidablePrims { get; private set; } | 104 | public bool CollidablePrims { get; private set; } |
105 | 105 | ||
106 | /// <summary> | ||
107 | /// Minimum value of the size of a non-physical prim in each axis | ||
108 | /// </summary> | ||
109 | public float m_minNonphys = 0.01f; | ||
110 | |||
111 | /// <summary> | ||
112 | /// Maximum value of the size of a non-physical prim in each axis | ||
113 | /// </summary> | ||
106 | public float m_maxNonphys = 256; | 114 | public float m_maxNonphys = 256; |
115 | |||
116 | /// <summary> | ||
117 | /// Minimum value of the size of a physical prim in each axis | ||
118 | /// </summary> | ||
119 | public float m_minPhys = 0.01f; | ||
120 | |||
121 | /// <summary> | ||
122 | /// Maximum value of the size of a physical prim in each axis | ||
123 | /// </summary> | ||
107 | public float m_maxPhys = 10; | 124 | public float m_maxPhys = 10; |
125 | |||
108 | public bool m_clampPrimSize; | 126 | public bool m_clampPrimSize; |
109 | public bool m_trustBinaries; | 127 | public bool m_trustBinaries; |
110 | public bool m_allowScriptCrossings; | 128 | public bool m_allowScriptCrossings; |
@@ -746,12 +764,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
746 | PhysicalPrims = startupConfig.GetBoolean("physical_prim", true); | 764 | PhysicalPrims = startupConfig.GetBoolean("physical_prim", true); |
747 | CollidablePrims = startupConfig.GetBoolean("collidable_prim", true); | 765 | CollidablePrims = startupConfig.GetBoolean("collidable_prim", true); |
748 | 766 | ||
767 | m_minNonphys = startupConfig.GetFloat("NonphysicalPrimMin", m_minNonphys); | ||
768 | if (RegionInfo.NonphysPrimMin > 0) | ||
769 | { | ||
770 | m_minNonphys = RegionInfo.NonphysPrimMin; | ||
771 | } | ||
772 | |||
749 | m_maxNonphys = startupConfig.GetFloat("NonphysicalPrimMax", m_maxNonphys); | 773 | m_maxNonphys = startupConfig.GetFloat("NonphysicalPrimMax", m_maxNonphys); |
750 | if (RegionInfo.NonphysPrimMax > 0) | 774 | if (RegionInfo.NonphysPrimMax > 0) |
751 | { | 775 | { |
752 | m_maxNonphys = RegionInfo.NonphysPrimMax; | 776 | m_maxNonphys = RegionInfo.NonphysPrimMax; |
753 | } | 777 | } |
754 | 778 | ||
779 | m_minPhys = startupConfig.GetFloat("PhysicalPrimMin", m_minPhys); | ||
780 | if (RegionInfo.PhysPrimMin > 0) | ||
781 | { | ||
782 | m_minPhys = RegionInfo.PhysPrimMin; | ||
783 | } | ||
784 | |||
755 | m_maxPhys = startupConfig.GetFloat("PhysicalPrimMax", m_maxPhys); | 785 | m_maxPhys = startupConfig.GetFloat("PhysicalPrimMax", m_maxPhys); |
756 | 786 | ||
757 | if (RegionInfo.PhysPrimMax > 0) | 787 | if (RegionInfo.PhysPrimMax > 0) |
@@ -3713,7 +3743,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3713 | "[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting. Removing existing presence.", | 3743 | "[SCENE]: Existing root scene presence detected for {0} {1} in {2} when connecting. Removing existing presence.", |
3714 | sp.Name, sp.UUID, RegionInfo.RegionName); | 3744 | sp.Name, sp.UUID, RegionInfo.RegionName); |
3715 | 3745 | ||
3716 | sp.ControllingClient.Close(); | 3746 | sp.ControllingClient.Close(true, true); |
3717 | sp = null; | 3747 | sp = null; |
3718 | } | 3748 | } |
3719 | 3749 | ||
@@ -4316,15 +4346,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
4316 | /// Tell a single agent to disconnect from the region. | 4346 | /// Tell a single agent to disconnect from the region. |
4317 | /// </summary> | 4347 | /// </summary> |
4318 | /// <param name="agentID"></param> | 4348 | /// <param name="agentID"></param> |
4319 | /// <param name="childOnly"></param> | 4349 | /// <param name="force"> |
4320 | public bool IncomingCloseAgent(UUID agentID, bool childOnly) | 4350 | /// Force the agent to close even if it might be in the middle of some other operation. You do not want to |
4351 | /// force unless you are absolutely sure that the agent is dead and a normal close is not working. | ||
4352 | /// </param> | ||
4353 | public bool IncomingCloseAgent(UUID agentID, bool force) | ||
4321 | { | 4354 | { |
4322 | //m_log.DebugFormat("[SCENE]: Processing incoming close agent for {0}", agentID); | 4355 | //m_log.DebugFormat("[SCENE]: Processing incoming close agent for {0}", agentID); |
4323 | 4356 | ||
4324 | ScenePresence presence = m_sceneGraph.GetScenePresence(agentID); | 4357 | ScenePresence presence = m_sceneGraph.GetScenePresence(agentID); |
4325 | if (presence != null) | 4358 | if (presence != null) |
4326 | { | 4359 | { |
4327 | presence.ControllingClient.Close(); | 4360 | presence.ControllingClient.Close(true, force); |
4328 | return true; | 4361 | return true; |
4329 | } | 4362 | } |
4330 | 4363 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index e29b2c1..c4b7b27 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -342,7 +342,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
342 | public bool AddNewSceneObject( | 342 | public bool AddNewSceneObject( |
343 | SceneObjectGroup sceneObject, bool attachToBackup, Vector3? pos, Quaternion? rot, Vector3 vel) | 343 | SceneObjectGroup sceneObject, bool attachToBackup, Vector3? pos, Quaternion? rot, Vector3 vel) |
344 | { | 344 | { |
345 | AddNewSceneObject(sceneObject, true, false); | 345 | AddNewSceneObject(sceneObject, attachToBackup, false); |
346 | 346 | ||
347 | if (pos != null) | 347 | if (pos != null) |
348 | sceneObject.AbsolutePosition = (Vector3)pos; | 348 | sceneObject.AbsolutePosition = (Vector3)pos; |
@@ -421,12 +421,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
421 | { | 421 | { |
422 | Vector3 scale = part.Shape.Scale; | 422 | Vector3 scale = part.Shape.Scale; |
423 | 423 | ||
424 | if (scale.X > m_parentScene.m_maxNonphys) | 424 | scale.X = Math.Max(m_parentScene.m_minNonphys, Math.Min(m_parentScene.m_maxNonphys, scale.X)); |
425 | scale.X = m_parentScene.m_maxNonphys; | 425 | scale.Y = Math.Max(m_parentScene.m_minNonphys, Math.Min(m_parentScene.m_maxNonphys, scale.Y)); |
426 | if (scale.Y > m_parentScene.m_maxNonphys) | 426 | scale.Z = Math.Max(m_parentScene.m_minNonphys, Math.Min(m_parentScene.m_maxNonphys, scale.Z)); |
427 | scale.Y = m_parentScene.m_maxNonphys; | ||
428 | if (scale.Z > m_parentScene.m_maxNonphys) | ||
429 | scale.Z = m_parentScene.m_maxNonphys; | ||
430 | 427 | ||
431 | part.Shape.Scale = scale; | 428 | part.Shape.Scale = scale; |
432 | } | 429 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index df4bd0d..0448c25 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -3460,17 +3460,17 @@ namespace OpenSim.Region.Framework.Scenes | |||
3460 | /// <param name="scale"></param> | 3460 | /// <param name="scale"></param> |
3461 | public void GroupResize(Vector3 scale) | 3461 | public void GroupResize(Vector3 scale) |
3462 | { | 3462 | { |
3463 | scale.X = Math.Min(scale.X, Scene.m_maxNonphys); | 3463 | scale.X = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.X)); |
3464 | scale.Y = Math.Min(scale.Y, Scene.m_maxNonphys); | 3464 | scale.Y = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.Y)); |
3465 | scale.Z = Math.Min(scale.Z, Scene.m_maxNonphys); | 3465 | scale.Z = Math.Max(Scene.m_minNonphys, Math.Min(Scene.m_maxNonphys, scale.Z)); |
3466 | 3466 | ||
3467 | PhysicsActor pa = m_rootPart.PhysActor; | 3467 | PhysicsActor pa = m_rootPart.PhysActor; |
3468 | 3468 | ||
3469 | if (pa != null && pa.IsPhysical) | 3469 | if (pa != null && pa.IsPhysical) |
3470 | { | 3470 | { |
3471 | scale.X = Math.Min(scale.X, Scene.m_maxPhys); | 3471 | scale.X = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.X)); |
3472 | scale.Y = Math.Min(scale.Y, Scene.m_maxPhys); | 3472 | scale.Y = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.Y)); |
3473 | scale.Z = Math.Min(scale.Z, Scene.m_maxPhys); | 3473 | scale.Z = Math.Max(Scene.m_minPhys, Math.Min(Scene.m_maxPhys, scale.Z)); |
3474 | } | 3474 | } |
3475 | 3475 | ||
3476 | float x = (scale.X / RootPart.Scale.X); | 3476 | float x = (scale.X / RootPart.Scale.X); |
@@ -3501,6 +3501,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3501 | y *= a; | 3501 | y *= a; |
3502 | z *= a; | 3502 | z *= a; |
3503 | } | 3503 | } |
3504 | else if (oldSize.X * x < m_scene.m_minPhys) | ||
3505 | { | ||
3506 | f = m_scene.m_minPhys / oldSize.X; | ||
3507 | a = f / x; | ||
3508 | x *= a; | ||
3509 | y *= a; | ||
3510 | z *= a; | ||
3511 | } | ||
3504 | 3512 | ||
3505 | if (oldSize.Y * y > m_scene.m_maxPhys) | 3513 | if (oldSize.Y * y > m_scene.m_maxPhys) |
3506 | { | 3514 | { |
@@ -3510,6 +3518,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3510 | y *= a; | 3518 | y *= a; |
3511 | z *= a; | 3519 | z *= a; |
3512 | } | 3520 | } |
3521 | else if (oldSize.Y * y < m_scene.m_minPhys) | ||
3522 | { | ||
3523 | f = m_scene.m_minPhys / oldSize.Y; | ||
3524 | a = f / y; | ||
3525 | x *= a; | ||
3526 | y *= a; | ||
3527 | z *= a; | ||
3528 | } | ||
3513 | 3529 | ||
3514 | if (oldSize.Z * z > m_scene.m_maxPhys) | 3530 | if (oldSize.Z * z > m_scene.m_maxPhys) |
3515 | { | 3531 | { |
@@ -3519,6 +3535,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3519 | y *= a; | 3535 | y *= a; |
3520 | z *= a; | 3536 | z *= a; |
3521 | } | 3537 | } |
3538 | else if (oldSize.Z * z < m_scene.m_minPhys) | ||
3539 | { | ||
3540 | f = m_scene.m_minPhys / oldSize.Z; | ||
3541 | a = f / z; | ||
3542 | x *= a; | ||
3543 | y *= a; | ||
3544 | z *= a; | ||
3545 | } | ||
3522 | } | 3546 | } |
3523 | else | 3547 | else |
3524 | { | 3548 | { |
@@ -3530,6 +3554,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3530 | y *= a; | 3554 | y *= a; |
3531 | z *= a; | 3555 | z *= a; |
3532 | } | 3556 | } |
3557 | else if (oldSize.X * x < m_scene.m_minNonphys) | ||
3558 | { | ||
3559 | f = m_scene.m_minNonphys / oldSize.X; | ||
3560 | a = f / x; | ||
3561 | x *= a; | ||
3562 | y *= a; | ||
3563 | z *= a; | ||
3564 | } | ||
3533 | 3565 | ||
3534 | if (oldSize.Y * y > m_scene.m_maxNonphys) | 3566 | if (oldSize.Y * y > m_scene.m_maxNonphys) |
3535 | { | 3567 | { |
@@ -3539,6 +3571,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3539 | y *= a; | 3571 | y *= a; |
3540 | z *= a; | 3572 | z *= a; |
3541 | } | 3573 | } |
3574 | else if (oldSize.Y * y < m_scene.m_minNonphys) | ||
3575 | { | ||
3576 | f = m_scene.m_minNonphys / oldSize.Y; | ||
3577 | a = f / y; | ||
3578 | x *= a; | ||
3579 | y *= a; | ||
3580 | z *= a; | ||
3581 | } | ||
3542 | 3582 | ||
3543 | if (oldSize.Z * z > m_scene.m_maxNonphys) | 3583 | if (oldSize.Z * z > m_scene.m_maxNonphys) |
3544 | { | 3584 | { |
@@ -3548,6 +3588,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3548 | y *= a; | 3588 | y *= a; |
3549 | z *= a; | 3589 | z *= a; |
3550 | } | 3590 | } |
3591 | else if (oldSize.Z * z < m_scene.m_minNonphys) | ||
3592 | { | ||
3593 | f = m_scene.m_minNonphys / oldSize.Z; | ||
3594 | a = f / z; | ||
3595 | x *= a; | ||
3596 | y *= a; | ||
3597 | z *= a; | ||
3598 | } | ||
3551 | } | 3599 | } |
3552 | } | 3600 | } |
3553 | } | 3601 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 4788a24..8e419f9 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -790,7 +790,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
790 | } | 790 | } |
791 | catch (Exception e) | 791 | catch (Exception e) |
792 | { | 792 | { |
793 | m_log.Error("[SCENEOBJECTPART]: GROUP POSITION. " + e.Message); | 793 | m_log.ErrorFormat("[SCENEOBJECTPART]: GROUP POSITION. {0}", e); |
794 | } | 794 | } |
795 | } | 795 | } |
796 | } | 796 | } |
@@ -2972,17 +2972,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
2972 | /// <param name="scale"></param> | 2972 | /// <param name="scale"></param> |
2973 | public void Resize(Vector3 scale) | 2973 | public void Resize(Vector3 scale) |
2974 | { | 2974 | { |
2975 | scale.X = Math.Min(scale.X, ParentGroup.Scene.m_maxNonphys); | 2975 | scale.X = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.X)); |
2976 | scale.Y = Math.Min(scale.Y, ParentGroup.Scene.m_maxNonphys); | 2976 | scale.Y = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.Y)); |
2977 | scale.Z = Math.Min(scale.Z, ParentGroup.Scene.m_maxNonphys); | 2977 | scale.Z = Math.Max(ParentGroup.Scene.m_minNonphys, Math.Min(ParentGroup.Scene.m_maxNonphys, scale.Z)); |
2978 | 2978 | ||
2979 | PhysicsActor pa = PhysActor; | 2979 | PhysicsActor pa = PhysActor; |
2980 | |||
2981 | if (pa != null && pa.IsPhysical) | 2980 | if (pa != null && pa.IsPhysical) |
2982 | { | 2981 | { |
2983 | scale.X = Math.Min(scale.X, ParentGroup.Scene.m_maxPhys); | 2982 | scale.X = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.X)); |
2984 | scale.Y = Math.Min(scale.Y, ParentGroup.Scene.m_maxPhys); | 2983 | scale.Y = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.Y)); |
2985 | scale.Z = Math.Min(scale.Z, ParentGroup.Scene.m_maxPhys); | 2984 | scale.Z = Math.Max(ParentGroup.Scene.m_minPhys, Math.Min(ParentGroup.Scene.m_maxPhys, scale.Z)); |
2986 | } | 2985 | } |
2987 | 2986 | ||
2988 | // m_log.DebugFormat("[SCENE OBJECT PART]: Resizing {0} {1} to {2}", Name, LocalId, scale); | 2987 | // m_log.DebugFormat("[SCENE OBJECT PART]: Resizing {0} {1} to {2}", Name, LocalId, scale); |
@@ -3567,23 +3566,32 @@ namespace OpenSim.Region.Framework.Scenes | |||
3567 | } | 3566 | } |
3568 | 3567 | ||
3569 | /// <summary> | 3568 | /// <summary> |
3570 | /// Set the color of prim faces | 3569 | /// Set the color & alpha of prim faces |
3571 | /// </summary> | 3570 | /// </summary> |
3572 | /// <param name="color"></param> | ||
3573 | /// <param name="face"></param> | 3571 | /// <param name="face"></param> |
3574 | public void SetFaceColor(Vector3 color, int face) | 3572 | /// <param name="color"></param> |
3573 | /// <param name="alpha"></param> | ||
3574 | public void SetFaceColorAlpha(int face, Vector3 color, double ?alpha) | ||
3575 | { | 3575 | { |
3576 | Vector3 clippedColor = Util.Clip(color, 0.0f, 1.0f); | ||
3577 | float clippedAlpha = alpha.HasValue ? | ||
3578 | Util.Clip((float)alpha.Value, 0.0f, 1.0f) : 0; | ||
3579 | |||
3576 | // The only way to get a deep copy/ If we don't do this, we can | 3580 | // The only way to get a deep copy/ If we don't do this, we can |
3577 | // mever detect color changes further down. | 3581 | // never detect color changes further down. |
3578 | Byte[] buf = Shape.Textures.GetBytes(); | 3582 | Byte[] buf = Shape.Textures.GetBytes(); |
3579 | Primitive.TextureEntry tex = new Primitive.TextureEntry(buf, 0, buf.Length); | 3583 | Primitive.TextureEntry tex = new Primitive.TextureEntry(buf, 0, buf.Length); |
3580 | Color4 texcolor; | 3584 | Color4 texcolor; |
3581 | if (face >= 0 && face < GetNumberOfSides()) | 3585 | if (face >= 0 && face < GetNumberOfSides()) |
3582 | { | 3586 | { |
3583 | texcolor = tex.CreateFace((uint)face).RGBA; | 3587 | texcolor = tex.CreateFace((uint)face).RGBA; |
3584 | texcolor.R = Util.Clip((float)color.X, 0.0f, 1.0f); | 3588 | texcolor.R = clippedColor.X; |
3585 | texcolor.G = Util.Clip((float)color.Y, 0.0f, 1.0f); | 3589 | texcolor.G = clippedColor.Y; |
3586 | texcolor.B = Util.Clip((float)color.Z, 0.0f, 1.0f); | 3590 | texcolor.B = clippedColor.Z; |
3591 | if (alpha.HasValue) | ||
3592 | { | ||
3593 | texcolor.A = clippedAlpha; | ||
3594 | } | ||
3587 | tex.FaceTextures[face].RGBA = texcolor; | 3595 | tex.FaceTextures[face].RGBA = texcolor; |
3588 | UpdateTextureEntry(tex.GetBytes()); | 3596 | UpdateTextureEntry(tex.GetBytes()); |
3589 | return; | 3597 | return; |
@@ -3595,15 +3603,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
3595 | if (tex.FaceTextures[i] != null) | 3603 | if (tex.FaceTextures[i] != null) |
3596 | { | 3604 | { |
3597 | texcolor = tex.FaceTextures[i].RGBA; | 3605 | texcolor = tex.FaceTextures[i].RGBA; |
3598 | texcolor.R = Util.Clip((float)color.X, 0.0f, 1.0f); | 3606 | texcolor.R = clippedColor.X; |
3599 | texcolor.G = Util.Clip((float)color.Y, 0.0f, 1.0f); | 3607 | texcolor.G = clippedColor.Y; |
3600 | texcolor.B = Util.Clip((float)color.Z, 0.0f, 1.0f); | 3608 | texcolor.B = clippedColor.Z; |
3609 | if (alpha.HasValue) | ||
3610 | { | ||
3611 | texcolor.A = clippedAlpha; | ||
3612 | } | ||
3601 | tex.FaceTextures[i].RGBA = texcolor; | 3613 | tex.FaceTextures[i].RGBA = texcolor; |
3602 | } | 3614 | } |
3603 | texcolor = tex.DefaultTexture.RGBA; | 3615 | texcolor = tex.DefaultTexture.RGBA; |
3604 | texcolor.R = Util.Clip((float)color.X, 0.0f, 1.0f); | 3616 | texcolor.R = clippedColor.X; |
3605 | texcolor.G = Util.Clip((float)color.Y, 0.0f, 1.0f); | 3617 | texcolor.G = clippedColor.Y; |
3606 | texcolor.B = Util.Clip((float)color.Z, 0.0f, 1.0f); | 3618 | texcolor.B = clippedColor.Z; |
3619 | if (alpha.HasValue) | ||
3620 | { | ||
3621 | texcolor.A = clippedAlpha; | ||
3622 | } | ||
3607 | tex.DefaultTexture.RGBA = texcolor; | 3623 | tex.DefaultTexture.RGBA = texcolor; |
3608 | } | 3624 | } |
3609 | UpdateTextureEntry(tex.GetBytes()); | 3625 | UpdateTextureEntry(tex.GetBytes()); |
@@ -4891,6 +4907,57 @@ namespace OpenSim.Region.Framework.Scenes | |||
4891 | ScheduleFullUpdate(); | 4907 | ScheduleFullUpdate(); |
4892 | } | 4908 | } |
4893 | 4909 | ||
4910 | public void UpdateSlice(float begin, float end) | ||
4911 | { | ||
4912 | if (end < begin) | ||
4913 | { | ||
4914 | float temp = begin; | ||
4915 | begin = end; | ||
4916 | end = temp; | ||
4917 | } | ||
4918 | end = Math.Min(1f, Math.Max(0f, end)); | ||
4919 | begin = Math.Min(Math.Min(1f, Math.Max(0f, begin)), end - 0.02f); | ||
4920 | if (begin < 0.02f && end < 0.02f) | ||
4921 | { | ||
4922 | begin = 0f; | ||
4923 | end = 0.02f; | ||
4924 | } | ||
4925 | |||
4926 | ushort uBegin = (ushort)(50000.0 * begin); | ||
4927 | ushort uEnd = (ushort)(50000.0 * (1f - end)); | ||
4928 | bool updatePossiblyNeeded = false; | ||
4929 | PrimType primType = GetPrimType(); | ||
4930 | if (primType == PrimType.SPHERE || primType == PrimType.TORUS || primType == PrimType.TUBE || primType == PrimType.RING) | ||
4931 | { | ||
4932 | if (m_shape.ProfileBegin != uBegin || m_shape.ProfileEnd != uEnd) | ||
4933 | { | ||
4934 | m_shape.ProfileBegin = uBegin; | ||
4935 | m_shape.ProfileEnd = uEnd; | ||
4936 | updatePossiblyNeeded = true; | ||
4937 | } | ||
4938 | } | ||
4939 | else if (m_shape.PathBegin != uBegin || m_shape.PathEnd != uEnd) | ||
4940 | { | ||
4941 | m_shape.PathBegin = uBegin; | ||
4942 | m_shape.PathEnd = uEnd; | ||
4943 | updatePossiblyNeeded = true; | ||
4944 | } | ||
4945 | |||
4946 | if (updatePossiblyNeeded && ParentGroup != null) | ||
4947 | { | ||
4948 | ParentGroup.HasGroupChanged = true; | ||
4949 | } | ||
4950 | if (updatePossiblyNeeded && PhysActor != null) | ||
4951 | { | ||
4952 | PhysActor.Shape = m_shape; | ||
4953 | ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); | ||
4954 | } | ||
4955 | if (updatePossiblyNeeded) | ||
4956 | { | ||
4957 | ScheduleFullUpdate(); | ||
4958 | } | ||
4959 | } | ||
4960 | |||
4894 | /// <summary> | 4961 | /// <summary> |
4895 | /// If the part is a sculpt/mesh, retrieve the mesh data and reinsert it into the shape so that the physics | 4962 | /// If the part is a sculpt/mesh, retrieve the mesh data and reinsert it into the shape so that the physics |
4896 | /// engine can use it. | 4963 | /// engine can use it. |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 47b2ead..3e8c7e5 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -974,7 +974,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
974 | { | 974 | { |
975 | if (wasChild && HasAttachments()) | 975 | if (wasChild && HasAttachments()) |
976 | { | 976 | { |
977 | m_log.DebugFormat("[SCENE PRESENCE]: Restarting scripts in attachments..."); | 977 | m_log.DebugFormat( |
978 | "[SCENE PRESENCE]: Restarting scripts in attachments for {0} in {1}", Name, Scene.Name); | ||
979 | |||
978 | // Resume scripts | 980 | // Resume scripts |
979 | Util.FireAndForget(delegate(object x) { | 981 | Util.FireAndForget(delegate(object x) { |
980 | foreach (SceneObjectGroup sog in m_attachments) | 982 | foreach (SceneObjectGroup sog in m_attachments) |
@@ -1527,17 +1529,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
1527 | bool DCFlagKeyPressed = false; | 1529 | bool DCFlagKeyPressed = false; |
1528 | Vector3 agent_control_v3 = Vector3.Zero; | 1530 | Vector3 agent_control_v3 = Vector3.Zero; |
1529 | 1531 | ||
1530 | bool oldflying = Flying; | 1532 | bool newFlying = actor.Flying; |
1531 | 1533 | ||
1532 | if (ForceFly) | 1534 | if (ForceFly) |
1533 | actor.Flying = true; | 1535 | newFlying = true; |
1534 | else if (FlyDisabled) | 1536 | else if (FlyDisabled) |
1535 | actor.Flying = false; | 1537 | newFlying = false; |
1536 | else | 1538 | else |
1537 | actor.Flying = ((flags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0); | 1539 | newFlying = ((flags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0); |
1538 | 1540 | ||
1539 | if (actor.Flying != oldflying) | 1541 | if (actor.Flying != newFlying) |
1542 | { | ||
1543 | // Note: ScenePresence.Flying is actually fetched from the physical actor | ||
1544 | // so setting PhysActor.Flying here also sets the ScenePresence's value. | ||
1545 | actor.Flying = newFlying; | ||
1540 | update_movementflag = true; | 1546 | update_movementflag = true; |
1547 | } | ||
1541 | 1548 | ||
1542 | if (ParentID == 0) | 1549 | if (ParentID == 0) |
1543 | { | 1550 | { |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs index 5758869..5faf131 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs | |||
@@ -141,7 +141,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
141 | TestScene scene = new SceneHelpers().SetupScene(); | 141 | TestScene scene = new SceneHelpers().SetupScene(); |
142 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); | 142 | ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); |
143 | 143 | ||
144 | scene.IncomingCloseAgent(sp.UUID); | 144 | scene.IncomingCloseAgent(sp.UUID, false); |
145 | 145 | ||
146 | Assert.That(scene.GetScenePresence(sp.UUID), Is.Null); | 146 | Assert.That(scene.GetScenePresence(sp.UUID), Is.Null); |
147 | Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(sp.UUID), Is.Null); | 147 | Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(sp.UUID), Is.Null); |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/UserInventoryTests.cs b/OpenSim/Region/Framework/Scenes/Tests/UserInventoryTests.cs index 44d2d45..9457ebb 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/UserInventoryTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/UserInventoryTests.cs | |||
@@ -50,9 +50,41 @@ using OpenSim.Tests.Common.Mock; | |||
50 | namespace OpenSim.Region.Framework.Tests | 50 | namespace OpenSim.Region.Framework.Tests |
51 | { | 51 | { |
52 | [TestFixture] | 52 | [TestFixture] |
53 | public class UserInventoryTests | 53 | public class UserInventoryTests : OpenSimTestCase |
54 | { | 54 | { |
55 | [Test] | 55 | [Test] |
56 | public void TestCreateInventoryFolders() | ||
57 | { | ||
58 | TestHelpers.InMethod(); | ||
59 | // TestHelpers.EnableLogging(); | ||
60 | |||
61 | // For this test both folders will have the same name which is legal in SL user inventories. | ||
62 | string foldersName = "f1"; | ||
63 | |||
64 | Scene scene = new SceneHelpers().SetupScene(); | ||
65 | UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001)); | ||
66 | |||
67 | UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, user1.PrincipalID, foldersName); | ||
68 | |||
69 | List<InventoryFolderBase> oneFolder | ||
70 | = UserInventoryHelpers.GetInventoryFolders(scene.InventoryService, user1.PrincipalID, foldersName); | ||
71 | |||
72 | Assert.That(oneFolder.Count, Is.EqualTo(1)); | ||
73 | InventoryFolderBase firstRetrievedFolder = oneFolder[0]; | ||
74 | Assert.That(firstRetrievedFolder.Name, Is.EqualTo(foldersName)); | ||
75 | |||
76 | UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, user1.PrincipalID, foldersName); | ||
77 | |||
78 | List<InventoryFolderBase> twoFolders | ||
79 | = UserInventoryHelpers.GetInventoryFolders(scene.InventoryService, user1.PrincipalID, foldersName); | ||
80 | |||
81 | Assert.That(twoFolders.Count, Is.EqualTo(2)); | ||
82 | Assert.That(twoFolders[0].Name, Is.EqualTo(foldersName)); | ||
83 | Assert.That(twoFolders[1].Name, Is.EqualTo(foldersName)); | ||
84 | Assert.That(twoFolders[0].ID, Is.Not.EqualTo(twoFolders[1].ID)); | ||
85 | } | ||
86 | |||
87 | [Test] | ||
56 | public void TestGiveInventoryItem() | 88 | public void TestGiveInventoryItem() |
57 | { | 89 | { |
58 | TestHelpers.InMethod(); | 90 | TestHelpers.InMethod(); |
@@ -83,7 +115,7 @@ namespace OpenSim.Region.Framework.Tests | |||
83 | public void TestGiveInventoryFolder() | 115 | public void TestGiveInventoryFolder() |
84 | { | 116 | { |
85 | TestHelpers.InMethod(); | 117 | TestHelpers.InMethod(); |
86 | // log4net.Config.XmlConfigurator.Configure(); | 118 | // TestHelpers.EnableLogging(); |
87 | 119 | ||
88 | Scene scene = new SceneHelpers().SetupScene(); | 120 | Scene scene = new SceneHelpers().SetupScene(); |
89 | UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001)); | 121 | UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001)); |