Merge branch 'master' of /home/opensim/var/repo/opensim
						commit
						d5e2d2949f
					
				|  | @ -700,6 +700,7 @@ namespace OpenSim | ||||||
|             scene.LoadWorldMap(); |             scene.LoadWorldMap(); | ||||||
| 
 | 
 | ||||||
|             scene.PhysicsScene = GetPhysicsScene(scene.RegionInfo.RegionName); |             scene.PhysicsScene = GetPhysicsScene(scene.RegionInfo.RegionName); | ||||||
|  |             scene.PhysicsScene.RequestAssetMethod = scene.PhysicsRequestAsset; | ||||||
|             scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised()); |             scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised()); | ||||||
|             scene.PhysicsScene.SetWaterLevel((float) regionInfo.RegionSettings.WaterHeight); |             scene.PhysicsScene.SetWaterLevel((float) regionInfo.RegionSettings.WaterHeight); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -27,11 +27,49 @@ | ||||||
| 
 | 
 | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Text; | using System.IO; | ||||||
|  | using System.Reflection; | ||||||
|  | using System.Threading; | ||||||
|  | using log4net.Config; | ||||||
|  | using NUnit.Framework; | ||||||
|  | using OpenMetaverse; | ||||||
|  | using OpenMetaverse.Assets; | ||||||
|  | using OpenSim.Framework; | ||||||
|  | using OpenSim.Region.CoreModules.Scripting.DynamicTexture; | ||||||
|  | using OpenSim.Region.CoreModules.Scripting.VectorRender; | ||||||
|  | using OpenSim.Region.Framework.Scenes; | ||||||
|  | using OpenSim.Region.Framework.Scenes.Serialization; | ||||||
|  | using OpenSim.Tests.Common; | ||||||
|  | using OpenSim.Tests.Common.Mock; | ||||||
| 
 | 
 | ||||||
| namespace OpenSim.Region.CoreModules.World.Tests | namespace OpenSim.Region.CoreModules.Scripting.VectorRender.Tests | ||||||
| { | { | ||||||
|     class SOGSpamTest |     [TestFixture] | ||||||
|  |     public class VectorRenderModuleTests | ||||||
|     { |     { | ||||||
|  |         [Test] | ||||||
|  |         public void TestDraw() | ||||||
|  |         { | ||||||
|  |             TestHelpers.InMethod(); | ||||||
|  | 
 | ||||||
|  |             Scene scene = new SceneHelpers().SetupScene(); | ||||||
|  |             DynamicTextureModule dtm = new DynamicTextureModule(); | ||||||
|  |             VectorRenderModule vrm = new VectorRenderModule(); | ||||||
|  |             SceneHelpers.SetupSceneModules(scene, dtm, vrm); | ||||||
|  | 
 | ||||||
|  |             SceneObjectGroup so = SceneHelpers.AddSceneObject(scene); | ||||||
|  |             UUID originalTextureID = so.RootPart.Shape.Textures.GetFace(0).TextureID; | ||||||
|  | 
 | ||||||
|  |             dtm.AddDynamicTextureData( | ||||||
|  |                 scene.RegionInfo.RegionID, | ||||||
|  |                 so.UUID, | ||||||
|  |                 vrm.GetContentType(), | ||||||
|  |                 "PenColour BLACK; MoveTo 40,220; FontSize 32; Text Hello World;", | ||||||
|  |                 "", | ||||||
|  |                 0); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             Assert.That(originalTextureID, Is.Not.EqualTo(so.RootPart.Shape.Textures.GetFace(0).TextureID)); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -98,15 +98,17 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
|         public void GetDrawStringSize(string text, string fontName, int fontSize,  |         public void GetDrawStringSize(string text, string fontName, int fontSize,  | ||||||
|                                       out double xSize, out double ySize) |                                       out double xSize, out double ySize) | ||||||
|         { |         { | ||||||
|             Font myFont = new Font(fontName, fontSize); |             using (Font myFont = new Font(fontName, fontSize)) | ||||||
|  |             { | ||||||
|                 SizeF stringSize = new SizeF(); |                 SizeF stringSize = new SizeF(); | ||||||
|             lock (m_graph) { |                 lock (m_graph) | ||||||
|  |                 { | ||||||
|                     stringSize = m_graph.MeasureString(text, myFont); |                     stringSize = m_graph.MeasureString(text, myFont); | ||||||
|                     xSize = stringSize.Width; |                     xSize = stringSize.Width; | ||||||
|                     ySize = stringSize.Height; |                     ySize = stringSize.Height; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 |         } | ||||||
| 
 | 
 | ||||||
|         #endregion |         #endregion | ||||||
| 
 | 
 | ||||||
|  | @ -121,6 +123,8 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
| 
 | 
 | ||||||
|             if (m_graph == null) |             if (m_graph == null) | ||||||
|             { |             { | ||||||
|  |                 // We won't dispose of these explicitly since this module is only removed when the entire simulator | ||||||
|  |                 // is shut down. | ||||||
|                 Bitmap bitmap = new Bitmap(1024, 1024, PixelFormat.Format32bppArgb); |                 Bitmap bitmap = new Bitmap(1024, 1024, PixelFormat.Format32bppArgb); | ||||||
|                 m_graph = Graphics.FromImage(bitmap); |                 m_graph = Graphics.FromImage(bitmap); | ||||||
|             } |             } | ||||||
|  | @ -299,24 +303,26 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             Bitmap bitmap; |             Bitmap bitmap = null; | ||||||
|  |             Graphics graph = null; | ||||||
| 
 | 
 | ||||||
|  |             try | ||||||
|  |             { | ||||||
|                 if (alpha == 256) |                 if (alpha == 256) | ||||||
|             { |  | ||||||
|                     bitmap = new Bitmap(width, height, PixelFormat.Format32bppRgb); |                     bitmap = new Bitmap(width, height, PixelFormat.Format32bppRgb); | ||||||
|             } |  | ||||||
|                 else |                 else | ||||||
|             { |  | ||||||
|                     bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb); |                     bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb); | ||||||
|             } |  | ||||||
| 
 | 
 | ||||||
|             Graphics graph = Graphics.FromImage(bitmap); |                 graph = Graphics.FromImage(bitmap); | ||||||
|      |      | ||||||
|                 // this is really just to save people filling the  |                 // this is really just to save people filling the  | ||||||
|                 // background color in their scripts, only do when fully opaque |                 // background color in their scripts, only do when fully opaque | ||||||
|                 if (alpha >= 255) |                 if (alpha >= 255) | ||||||
|                 { |                 { | ||||||
|                 graph.FillRectangle(new SolidBrush(bgColor), 0, 0, width, height);  |                     using (SolidBrush bgFillBrush = new SolidBrush(bgColor)) | ||||||
|  |                     { | ||||||
|  |                         graph.FillRectangle(bgFillBrush, 0, 0, width, height); | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|      |      | ||||||
|                 for (int w = 0; w < bitmap.Width; w++) |                 for (int w = 0; w < bitmap.Width; w++) | ||||||
|  | @ -347,6 +353,15 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
| 
 | 
 | ||||||
|                 m_textureManager.ReturnData(id, imageJ2000); |                 m_textureManager.ReturnData(id, imageJ2000); | ||||||
|             } |             } | ||||||
|  |             finally | ||||||
|  |             { | ||||||
|  |                 if (graph != null) | ||||||
|  |                     graph.Dispose(); | ||||||
|  | 
 | ||||||
|  |                 if (bitmap != null) | ||||||
|  |                     bitmap.Dispose(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|          |          | ||||||
|         private int parseIntParam(string strInt) |         private int parseIntParam(string strInt) | ||||||
|         { |         { | ||||||
|  | @ -407,11 +422,17 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
|         { |         { | ||||||
|             Point startPoint = new Point(0, 0); |             Point startPoint = new Point(0, 0); | ||||||
|             Point endPoint = new Point(0, 0); |             Point endPoint = new Point(0, 0); | ||||||
|             Pen drawPen = new Pen(Color.Black, 7); |             Pen drawPen = null; | ||||||
|  |             Font myFont = null; | ||||||
|  |             SolidBrush myBrush = null; | ||||||
|  | 
 | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 drawPen = new Pen(Color.Black, 7); | ||||||
|                 string fontName = m_fontName; |                 string fontName = m_fontName; | ||||||
|                 float fontSize = 14; |                 float fontSize = 14; | ||||||
|             Font myFont = new Font(fontName, fontSize); |                 myFont = new Font(fontName, fontSize); | ||||||
|             SolidBrush myBrush = new SolidBrush(Color.Black); |                 myBrush = new SolidBrush(Color.Black); | ||||||
| 
 | 
 | ||||||
|                 char[] lineDelimiter = {dataDelim}; |                 char[] lineDelimiter = {dataDelim}; | ||||||
|                 char[] partsDelimiter = {','}; |                 char[] partsDelimiter = {','}; | ||||||
|  | @ -453,19 +474,27 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
|                         GetParams(partsDelimiter, ref nextLine, 5, ref x, ref y); |                         GetParams(partsDelimiter, ref nextLine, 5, ref x, ref y); | ||||||
|                         endPoint.X = (int) x; |                         endPoint.X = (int) x; | ||||||
|                         endPoint.Y = (int) y; |                         endPoint.Y = (int) y; | ||||||
|                     Image image = ImageHttpRequest(nextLine); | 
 | ||||||
|  |                         using (Image image = ImageHttpRequest(nextLine)) | ||||||
|  |                         { | ||||||
|                             if (image != null) |                             if (image != null) | ||||||
|                             { |                             { | ||||||
|                                 graph.DrawImage(image, (float)startPoint.X, (float)startPoint.Y, x, y); |                                 graph.DrawImage(image, (float)startPoint.X, (float)startPoint.Y, x, y); | ||||||
|                             } |                             } | ||||||
|                             else |                             else | ||||||
|                             { |                             { | ||||||
|                         graph.DrawString("URL couldn't be resolved or is", new Font(m_fontName,6),  |                                 using (Font errorFont = new Font(m_fontName,6)) | ||||||
|  |                                 { | ||||||
|  |                                     graph.DrawString("URL couldn't be resolved or is", errorFont, | ||||||
|                                                      myBrush, startPoint); |                                                      myBrush, startPoint); | ||||||
|                         graph.DrawString("not an image. Please check URL.", new Font(m_fontName, 6),  |                                     graph.DrawString("not an image. Please check URL.", errorFont, | ||||||
|                                                      myBrush, new Point(startPoint.X, 12 + startPoint.Y)); |                                                      myBrush, new Point(startPoint.X, 12 + startPoint.Y)); | ||||||
|  |                                 } | ||||||
|  |      | ||||||
|                                 graph.DrawRectangle(drawPen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y); |                                 graph.DrawRectangle(drawPen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y); | ||||||
|                             } |                             } | ||||||
|  |                         } | ||||||
|  | 
 | ||||||
|                         startPoint.X += endPoint.X; |                         startPoint.X += endPoint.X; | ||||||
|                         startPoint.Y += endPoint.Y; |                         startPoint.Y += endPoint.Y; | ||||||
|                     } |                     } | ||||||
|  | @ -519,6 +548,8 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
|                         nextLine = nextLine.Remove(0, 8); |                         nextLine = nextLine.Remove(0, 8); | ||||||
|                         nextLine = nextLine.Trim(); |                         nextLine = nextLine.Trim(); | ||||||
|                         fontSize = Convert.ToSingle(nextLine, CultureInfo.InvariantCulture); |                         fontSize = Convert.ToSingle(nextLine, CultureInfo.InvariantCulture); | ||||||
|  | 
 | ||||||
|  |                         myFont.Dispose(); | ||||||
|                         myFont = new Font(fontName, fontSize); |                         myFont = new Font(fontName, fontSize); | ||||||
|                     } |                     } | ||||||
|                     else if (nextLine.StartsWith("FontProp")) |                     else if (nextLine.StartsWith("FontProp")) | ||||||
|  | @ -534,22 +565,40 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
|                             { |                             { | ||||||
|                                 case "B": |                                 case "B": | ||||||
|                                     if (!(myFont.Bold)) |                                     if (!(myFont.Bold)) | ||||||
|                                     myFont = new Font(myFont, myFont.Style | FontStyle.Bold); |                                     { | ||||||
|  |                                         Font newFont = new Font(myFont, myFont.Style | FontStyle.Bold); | ||||||
|  |                                         myFont.Dispose(); | ||||||
|  |                                         myFont = newFont; | ||||||
|  |                                     } | ||||||
|                                     break; |                                     break; | ||||||
|                                 case "I": |                                 case "I": | ||||||
|                                     if (!(myFont.Italic)) |                                     if (!(myFont.Italic)) | ||||||
|                                     myFont = new Font(myFont, myFont.Style | FontStyle.Italic); |                                     { | ||||||
|  |                                         Font newFont = new Font(myFont, myFont.Style | FontStyle.Italic); | ||||||
|  |                                         myFont.Dispose(); | ||||||
|  |                                         myFont = newFont; | ||||||
|  |                                     } | ||||||
|                                     break; |                                     break; | ||||||
|                                 case "U": |                                 case "U": | ||||||
|                                     if (!(myFont.Underline)) |                                     if (!(myFont.Underline)) | ||||||
|                                     myFont = new Font(myFont, myFont.Style | FontStyle.Underline); |                                     { | ||||||
|  |                                         Font newFont = new Font(myFont, myFont.Style | FontStyle.Underline); | ||||||
|  |                                         myFont.Dispose(); | ||||||
|  |                                         myFont = newFont; | ||||||
|  |                                     } | ||||||
|                                     break; |                                     break; | ||||||
|                                 case "S": |                                 case "S": | ||||||
|                                     if (!(myFont.Strikeout)) |                                     if (!(myFont.Strikeout)) | ||||||
|                                     myFont = new Font(myFont, myFont.Style | FontStyle.Strikeout); |                                     { | ||||||
|  |                                         Font newFont = new Font(myFont, myFont.Style | FontStyle.Strikeout); | ||||||
|  |                                         myFont.Dispose(); | ||||||
|  |                                         myFont = newFont; | ||||||
|  |                                     } | ||||||
|                                     break; |                                     break; | ||||||
|                                 case "R": |                                 case "R": | ||||||
|                                 myFont = new Font(myFont, FontStyle.Regular); |                                     Font newFont = new Font(myFont, FontStyle.Regular); | ||||||
|  |                                     myFont.Dispose(); | ||||||
|  |                                     myFont = newFont; | ||||||
|                                     break; |                                     break; | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|  | @ -558,6 +607,7 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
|                     { |                     { | ||||||
|                         nextLine = nextLine.Remove(0, 8); |                         nextLine = nextLine.Remove(0, 8); | ||||||
|                         fontName = nextLine.Trim(); |                         fontName = nextLine.Trim(); | ||||||
|  |                         myFont.Dispose(); | ||||||
|                         myFont = new Font(fontName, fontSize); |                         myFont = new Font(fontName, fontSize); | ||||||
|                     } |                     } | ||||||
|                     else if (nextLine.StartsWith("PenSize")) |                     else if (nextLine.StartsWith("PenSize")) | ||||||
|  | @ -640,6 +690,18 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |             finally | ||||||
|  |             { | ||||||
|  |                 if (drawPen != null) | ||||||
|  |                     drawPen.Dispose(); | ||||||
|  | 
 | ||||||
|  |                 if (myFont != null) | ||||||
|  |                     myFont.Dispose(); | ||||||
|  | 
 | ||||||
|  |                 if (myBrush != null) | ||||||
|  |                     myBrush.Dispose(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         private static void GetParams(char[] partsDelimiter, ref string line, int startLength, ref float x, ref float y) |         private static void GetParams(char[] partsDelimiter, ref string line, int startLength, ref float x, ref float y) | ||||||
|         { |         { | ||||||
|  | @ -702,6 +764,7 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             catch { } |             catch { } | ||||||
|  | 
 | ||||||
|             return null; |             return null; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -154,6 +154,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver | ||||||
| 
 | 
 | ||||||
|         protected void OnRequestCallbackTimeout(object source, ElapsedEventArgs args) |         protected void OnRequestCallbackTimeout(object source, ElapsedEventArgs args) | ||||||
|         { |         { | ||||||
|  |             bool close = true; | ||||||
|  | 
 | ||||||
|             try |             try | ||||||
|             { |             { | ||||||
|                 lock (this) |                 lock (this) | ||||||
|  | @ -161,7 +163,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver | ||||||
|                     // Take care of the possibilty that this thread started but was paused just outside the lock before |                     // Take care of the possibilty that this thread started but was paused just outside the lock before | ||||||
|                     // the final request came in (assuming that such a thing is possible) |                     // the final request came in (assuming that such a thing is possible) | ||||||
|                     if (m_requestState == RequestState.Completed) |                     if (m_requestState == RequestState.Completed) | ||||||
|  |                     { | ||||||
|  |                         close = false; | ||||||
|                         return; |                         return; | ||||||
|  |                     } | ||||||
|                      |                      | ||||||
|                     m_requestState = RequestState.Aborted; |                     m_requestState = RequestState.Aborted; | ||||||
|                 } |                 } | ||||||
|  | @ -208,6 +213,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | ||||||
|             } |             } | ||||||
|             finally |             finally | ||||||
|             { |             { | ||||||
|  |                 if (close) | ||||||
|                     m_assetsArchiver.ForceClose(); |                     m_assetsArchiver.ForceClose(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | @ -242,11 +248,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver | ||||||
|                      |                      | ||||||
|                     m_requestCallbackTimer.Stop(); |                     m_requestCallbackTimer.Stop(); | ||||||
|                      |                      | ||||||
|                     if (m_requestState == RequestState.Aborted) |                     if ((m_requestState == RequestState.Aborted) || (m_requestState == RequestState.Completed)) | ||||||
|                     { |                     { | ||||||
|                         m_log.WarnFormat( |                         m_log.WarnFormat( | ||||||
|                             "[ARCHIVER]: Received information about asset {0} after archive save abortion.  Ignoring.",  |                             "[ARCHIVER]: Received information about asset {0} while in state {1}.  Ignoring.",  | ||||||
|                             id); |                             id, m_requestState); | ||||||
| 
 | 
 | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|  | @ -268,7 +274,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | ||||||
|                         m_notFoundAssetUuids.Add(new UUID(id)); |                         m_notFoundAssetUuids.Add(new UUID(id)); | ||||||
|                     } |                     } | ||||||
|          |          | ||||||
|                     if (m_foundAssetUuids.Count + m_notFoundAssetUuids.Count == m_repliesRequired) |                     if (m_foundAssetUuids.Count + m_notFoundAssetUuids.Count >= m_repliesRequired) | ||||||
|                     { |                     { | ||||||
|                         m_requestState = RequestState.Completed; |                         m_requestState = RequestState.Completed; | ||||||
|                          |                          | ||||||
|  |  | ||||||
|  | @ -2132,6 +2132,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                     sourcePart.Inventory.RemoveInventoryItem(item.ItemID); |                     sourcePart.Inventory.RemoveInventoryItem(item.ItemID); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             group.FromPartID = sourcePart.UUID; | ||||||
|             AddNewSceneObject(group, true, pos, rot, vel); |             AddNewSceneObject(group, true, pos, rot, vel); | ||||||
|              |              | ||||||
|             // We can only call this after adding the scene object, since the scene object references the scene |             // We can only call this after adding the scene object, since the scene object references the scene | ||||||
|  |  | ||||||
|  | @ -5421,5 +5421,21 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                 m_SpawnPoint = 1; |                 m_SpawnPoint = 1; | ||||||
|             return m_SpawnPoint - 1; |             return m_SpawnPoint - 1; | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         // Wrappers to get physics modules retrieve assets. Has to be done this way | ||||||
|  |         // because we can't assign the asset service to physics directly - at the | ||||||
|  |         // time physics are instantiated it's not registered but it will be by | ||||||
|  |         // the time the first prim exists. | ||||||
|  |         public void PhysicsRequestAsset(UUID assetID, AssetReceivedDelegate callback) | ||||||
|  |         { | ||||||
|  |             AssetService.Get(assetID.ToString(), callback, PhysicsAssetReceived); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void PhysicsAssetReceived(string id, Object sender, AssetBase asset) | ||||||
|  |         { | ||||||
|  |             AssetReceivedDelegate callback = (AssetReceivedDelegate)sender; | ||||||
|  | 
 | ||||||
|  |             callback(asset); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -26,6 +26,7 @@ | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| using System; | using System; | ||||||
|  | using System.ComponentModel; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Drawing; | using System.Drawing; | ||||||
| using System.IO; | using System.IO; | ||||||
|  | @ -610,6 +611,14 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|         /// </remarks> |         /// </remarks> | ||||||
|         public UUID FromItemID { get; set; } |         public UUID FromItemID { get; set; } | ||||||
| 
 | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// Refers to the SceneObjectPart.UUID property of the object that this object was rezzed from, if applicable. | ||||||
|  |         /// </summary> | ||||||
|  |         /// <remarks> | ||||||
|  |         /// If not applicable will be UUID.Zero | ||||||
|  |         /// </remarks> | ||||||
|  |         public UUID FromPartID { get; set; } | ||||||
|  | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// The folder ID that this object was rezzed from, if applicable. |         /// The folder ID that this object was rezzed from, if applicable. | ||||||
|         /// </summary> |         /// </summary> | ||||||
|  | @ -640,6 +649,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|         /// The original SceneObjectPart will be used rather than a copy, preserving |         /// The original SceneObjectPart will be used rather than a copy, preserving | ||||||
|         /// its existing localID and UUID. |         /// its existing localID and UUID. | ||||||
|         /// </summary> |         /// </summary> | ||||||
|  |         /// <param name='part'>Root part for this scene object.</param> | ||||||
|         public SceneObjectGroup(SceneObjectPart part) |         public SceneObjectGroup(SceneObjectPart part) | ||||||
|         { |         { | ||||||
|             SetRootPart(part); |             SetRootPart(part); | ||||||
|  | @ -649,8 +659,8 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|         /// Constructor.  This object is added to the scene later via AttachToScene() |         /// Constructor.  This object is added to the scene later via AttachToScene() | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         public SceneObjectGroup(UUID ownerID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape) |         public SceneObjectGroup(UUID ownerID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape) | ||||||
|  |             :this(new SceneObjectPart(ownerID, shape, pos, rot, Vector3.Zero)) | ||||||
|         {  |         {  | ||||||
|             SetRootPart(new SceneObjectPart(ownerID, shape, pos, rot, Vector3.Zero)); |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|  |  | ||||||
|  | @ -2467,7 +2467,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
| 
 | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// Schedule a terse update for this prim.  Terse updates only send position, |         /// Schedule a terse update for this prim.  Terse updates only send position, | ||||||
|         /// rotation, velocity, rotational velocity and shape information. |         /// rotation, velocity and rotational velocity information. | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         public void ScheduleTerseUpdate() |         public void ScheduleTerseUpdate() | ||||||
|         { |         { | ||||||
|  |  | ||||||
|  | @ -214,7 +214,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | ||||||
|             param["Charter"] = charter; |             param["Charter"] = charter; | ||||||
|             param["ShowInList"] = showInList == true ? 1 : 0; |             param["ShowInList"] = showInList == true ? 1 : 0; | ||||||
|             param["InsigniaID"] = insigniaID.ToString(); |             param["InsigniaID"] = insigniaID.ToString(); | ||||||
|             param["MembershipFee"] = 0; |             param["MembershipFee"] = membershipFee; | ||||||
|             param["OpenEnrollment"] = openEnrollment == true ? 1 : 0; |             param["OpenEnrollment"] = openEnrollment == true ? 1 : 0; | ||||||
|             param["AllowPublish"] = allowPublish == true ? 1 : 0; |             param["AllowPublish"] = allowPublish == true ? 1 : 0; | ||||||
|             param["MaturePublish"] = maturePublish == true ? 1 : 0; |             param["MaturePublish"] = maturePublish == true ? 1 : 0; | ||||||
|  |  | ||||||
|  | @ -1331,13 +1331,15 @@ public sealed class BSPrim : PhysicsActor | ||||||
| 
 | 
 | ||||||
|             base.RequestPhysicsterseUpdate(); |             base.RequestPhysicsterseUpdate(); | ||||||
|         } |         } | ||||||
|  |             /* | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             // For debugging, we can also report the movement of children |             // For debugging, we also report the movement of children | ||||||
|             DetailLog("{0},UpdateProperties,child,pos={1},orient={2},vel={3},accel={4},rotVel={5}", |             DetailLog("{0},UpdateProperties,child,pos={1},orient={2},vel={3},accel={4},rotVel={5}", | ||||||
|                     LocalID, entprop.Position, entprop.Rotation, entprop.Velocity,  |                     LocalID, entprop.Position, entprop.Rotation, entprop.Velocity,  | ||||||
|                     entprop.Acceleration, entprop.RotationalVelocity); |                     entprop.Acceleration, entprop.RotationalVelocity); | ||||||
|         } |         } | ||||||
|  |              */ | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // I've collided with something |     // I've collided with something | ||||||
|  |  | ||||||
|  | @ -390,9 +390,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters | ||||||
|     // Simulate one timestep |     // Simulate one timestep | ||||||
|     public override float Simulate(float timeStep) |     public override float Simulate(float timeStep) | ||||||
|     { |     { | ||||||
|         int updatedEntityCount; |         int updatedEntityCount = 0; | ||||||
|         IntPtr updatedEntitiesPtr; |         IntPtr updatedEntitiesPtr; | ||||||
|         int collidersCount; |         int collidersCount = 0; | ||||||
|         IntPtr collidersPtr; |         IntPtr collidersPtr; | ||||||
| 
 | 
 | ||||||
|         LastSimulatedTimestep = timeStep; |         LastSimulatedTimestep = timeStep; | ||||||
|  | @ -411,8 +411,21 @@ public class BSScene : PhysicsScene, IPhysicsParameters | ||||||
| 
 | 
 | ||||||
|         // step the physical world one interval |         // step the physical world one interval | ||||||
|         m_simulationStep++; |         m_simulationStep++; | ||||||
|         int numSubSteps = BulletSimAPI.PhysicsStep(m_worldID, timeStep, m_maxSubSteps, m_fixedTimeStep,  |         int numSubSteps = 0; | ||||||
|  |         try | ||||||
|  |         { | ||||||
|  |             numSubSteps = BulletSimAPI.PhysicsStep(m_worldID, timeStep, m_maxSubSteps, m_fixedTimeStep, | ||||||
|                         out updatedEntityCount, out updatedEntitiesPtr, out collidersCount, out collidersPtr); |                         out updatedEntityCount, out updatedEntitiesPtr, out collidersCount, out collidersPtr); | ||||||
|  |             DetailLog("{0},Simulate,call, substeps={1}, updates={2}, colliders={3}", "0000000000", numSubSteps, updatedEntityCount, collidersCount);  | ||||||
|  |         } | ||||||
|  |         catch (Exception e) | ||||||
|  |         { | ||||||
|  |             m_log.WarnFormat("{0},PhysicsStep Exception: substeps={1}, updates={2}, colliders={3}, e={4}", LogHeader, numSubSteps, updatedEntityCount, collidersCount, e); | ||||||
|  |             DetailLog("{0},PhysicsStepException,call, substeps={1}, updates={2}, colliders={3}", "0000000000", numSubSteps, updatedEntityCount, collidersCount); | ||||||
|  |             // updatedEntityCount = 0; | ||||||
|  |             collidersCount = 0; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|         // Don't have to use the pointers passed back since we know it is the same pinned memory we passed in |         // Don't have to use the pointers passed back since we know it is the same pinned memory we passed in | ||||||
| 
 | 
 | ||||||
|  | @ -711,7 +724,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters | ||||||
|         return true;  |         return true;  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // The calls to the PhysicsActors can't directly call into the physics engine |     // Calls to the PhysicsActors can't directly call into the physics engine | ||||||
|     // because it might be busy. We delay changes to a known time. |     // because it might be busy. We delay changes to a known time. | ||||||
|     // We rely on C#'s closure to save and restore the context for the delegate. |     // We rely on C#'s closure to save and restore the context for the delegate. | ||||||
|     public void TaintedObject(TaintCallback callback) |     public void TaintedObject(TaintCallback callback) | ||||||
|  | @ -1275,5 +1288,11 @@ public class BSScene : PhysicsScene, IPhysicsParameters | ||||||
| 
 | 
 | ||||||
|     #endregion Runtime settable parameters |     #endregion Runtime settable parameters | ||||||
| 
 | 
 | ||||||
|  |     // Invoke the detailed logger and output something if it's enabled. | ||||||
|  |     private void DetailLog(string msg, params Object[] args) | ||||||
|  |     { | ||||||
|  |         PhysicsLogging.Write(msg, args); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -43,6 +43,9 @@ namespace OpenSim.Region.Physics.Manager | ||||||
|     public delegate void JointDeactivated(PhysicsJoint joint); |     public delegate void JointDeactivated(PhysicsJoint joint); | ||||||
|     public delegate void JointErrorMessage(PhysicsJoint joint, string message); // this refers to an "error message due to a problem", not "amount of joint constraint violation" |     public delegate void JointErrorMessage(PhysicsJoint joint, string message); // this refers to an "error message due to a problem", not "amount of joint constraint violation" | ||||||
| 
 | 
 | ||||||
|  |     public delegate void RequestAssetDelegate(UUID assetID, AssetReceivedDelegate callback); | ||||||
|  |     public delegate void AssetReceivedDelegate(AssetBase asset); | ||||||
|  | 
 | ||||||
|     /// <summary> |     /// <summary> | ||||||
|     /// Contact result from a raycast. |     /// Contact result from a raycast. | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  | @ -73,6 +76,8 @@ namespace OpenSim.Region.Physics.Manager | ||||||
|             get { return new NullPhysicsScene(); } |             get { return new NullPhysicsScene(); } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public RequestAssetDelegate RequestAssetMethod { private get; set; } | ||||||
|  | 
 | ||||||
|         public virtual void TriggerPhysicsBasedRestart() |         public virtual void TriggerPhysicsBasedRestart() | ||||||
|         { |         { | ||||||
|             physicsCrash handler = OnPhysicsCrash; |             physicsCrash handler = OnPhysicsCrash; | ||||||
|  |  | ||||||
|  | @ -3314,5 +3314,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | ||||||
| 
 | 
 | ||||||
|             return Math.Max(a, b); |             return Math.Max(a, b); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         public LSL_Key osGetRezzingObject() | ||||||
|  |         { | ||||||
|  |             CheckThreatLevel(ThreatLevel.None, "osGetRezzingObject"); | ||||||
|  |             m_host.AddScriptLPS(1); | ||||||
|  | 
 | ||||||
|  |             return new LSL_Key(m_host.ParentGroup.FromPartID.ToString()); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -299,5 +299,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | ||||||
|         /// <param name="b"></param> |         /// <param name="b"></param> | ||||||
|         /// <returns></returns> |         /// <returns></returns> | ||||||
|         LSL_Float osMax(double a, double b); |         LSL_Float osMax(double a, double b); | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// Get the key of the object that rezzed this object. | ||||||
|  |         /// </summary> | ||||||
|  |         /// <returns>Rezzing object key or NULL_KEY if rezzed by agent or otherwise unknown.</returns> | ||||||
|  |         LSL_Key osGetRezzingObject(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -945,5 +945,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | ||||||
|         { |         { | ||||||
|             return m_OSSL_Functions.osMax(a, b); |             return m_OSSL_Functions.osMax(a, b); | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|  |         public LSL_Key osGetRezzingObject() | ||||||
|  |         { | ||||||
|  |             return m_OSSL_Functions.osGetRezzingObject(); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -191,7 +191,8 @@ namespace OpenSim.Services.AssetService | ||||||
| 
 | 
 | ||||||
|         public virtual bool Delete(string id) |         public virtual bool Delete(string id) | ||||||
|         { |         { | ||||||
|             m_log.DebugFormat("[ASSET SERVICE]: Deleting asset {0}", id); | //            m_log.DebugFormat("[ASSET SERVICE]: Deleting asset {0}", id); | ||||||
|  | 
 | ||||||
|             UUID assetID; |             UUID assetID; | ||||||
|             if (!UUID.TryParse(id, out assetID)) |             if (!UUID.TryParse(id, out assetID)) | ||||||
|                 return false; |                 return false; | ||||||
|  |  | ||||||
|  | @ -188,7 +188,8 @@ namespace OpenSim.Services.AssetService | ||||||
| 
 | 
 | ||||||
|         public virtual bool Delete(string id) |         public virtual bool Delete(string id) | ||||||
|         { |         { | ||||||
|             m_log.DebugFormat("[XASSET SERVICE]: Deleting asset {0}", id); | //            m_log.DebugFormat("[XASSET SERVICE]: Deleting asset {0}", id); | ||||||
|  | 
 | ||||||
|             UUID assetID; |             UUID assetID; | ||||||
|             if (!UUID.TryParse(id, out assetID)) |             if (!UUID.TryParse(id, out assetID)) | ||||||
|                 return false; |                 return false; | ||||||
|  |  | ||||||
|  | @ -47,6 +47,9 @@ namespace pCampBot | ||||||
|         { |         { | ||||||
|             Dictionary<UUID, Primitive> objects = Bot.Objects; |             Dictionary<UUID, Primitive> objects = Bot.Objects; | ||||||
| 
 | 
 | ||||||
|  |             if (objects.Count <= 0) | ||||||
|  |                 return; | ||||||
|  | 
 | ||||||
|             Primitive prim = objects.ElementAt(Bot.Random.Next(0, objects.Count - 1)).Value; |             Primitive prim = objects.ElementAt(Bot.Random.Next(0, objects.Count - 1)).Value; | ||||||
| 
 | 
 | ||||||
|             // This appears to be a typical message sent when a viewer user clicks a clickable object |             // This appears to be a typical message sent when a viewer user clicks a clickable object | ||||||
|  |  | ||||||
|  | @ -937,7 +937,7 @@ | ||||||
|     FixedTimeStep = .01667 |     FixedTimeStep = .01667 | ||||||
| 
 | 
 | ||||||
|     MaxCollisionsPerFrame = 2048 |     MaxCollisionsPerFrame = 2048 | ||||||
|     MaxUpdatesPerFrame = 8192 |     MaxUpdatesPerFrame = 2048 | ||||||
| 
 | 
 | ||||||
| [RemoteAdmin] | [RemoteAdmin] | ||||||
|     enabled = false |     enabled = false | ||||||
|  |  | ||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -2995,13 +2995,13 @@ | ||||||
|       --> |       --> | ||||||
|       <Files> |       <Files> | ||||||
|         <!-- SADLY the way this works means you need to keep adding these paths --> |         <!-- SADLY the way this works means you need to keep adding these paths --> | ||||||
|         <Match path="Agent/TextureSender/Tests" pattern="*.cs" recurse="true"/> |  | ||||||
|         <Match path="Asset/Tests" pattern="*.cs" recurse="true"/> |         <Match path="Asset/Tests" pattern="*.cs" recurse="true"/> | ||||||
|         <Match path="Avatar/Attachments/Tests" pattern="*.cs" recurse="true"/> |         <Match path="Avatar/Attachments/Tests" pattern="*.cs" recurse="true"/> | ||||||
|         <Match path="Avatar/AvatarFactory/Tests" pattern="*.cs" recurse="true"/> |         <Match path="Avatar/AvatarFactory/Tests" pattern="*.cs" recurse="true"/> | ||||||
|         <Match path="Avatar/Friends/Tests" pattern="*.cs" recurse="true"/> |         <Match path="Avatar/Friends/Tests" pattern="*.cs" recurse="true"/> | ||||||
|         <Match path="Avatar/Inventory/Archiver/Tests" pattern="*.cs" recurse="true"/> |         <Match path="Avatar/Inventory/Archiver/Tests" pattern="*.cs" recurse="true"/> | ||||||
|         <Match path="Framework/InventoryAccess/Tests" pattern="*.cs" recurse="true"/> |         <Match path="Framework/InventoryAccess/Tests" pattern="*.cs" recurse="true"/> | ||||||
|  |         <Match path="Scripting/VectorRender/Tests" pattern="*.cs" recurse="true"/> | ||||||
|         <Match path="World/Archiver/Tests" pattern="*.cs" recurse="true"/> |         <Match path="World/Archiver/Tests" pattern="*.cs" recurse="true"/> | ||||||
|         <Match buildAction="EmbeddedResource" path="World/Archiver/Tests/Resources" pattern="*"/> |         <Match buildAction="EmbeddedResource" path="World/Archiver/Tests/Resources" pattern="*"/> | ||||||
|         <Match path="World/Land/Tests" pattern="*.cs" recurse="true"/> |         <Match path="World/Land/Tests" pattern="*.cs" recurse="true"/> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 BlueWall
						BlueWall