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,16 +98,18 @@ 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();
|
{
|
||||||
lock (m_graph) {
|
SizeF stringSize = new SizeF();
|
||||||
stringSize = m_graph.MeasureString(text, myFont);
|
lock (m_graph)
|
||||||
xSize = stringSize.Width;
|
{
|
||||||
ySize = stringSize.Height;
|
stringSize = m_graph.MeasureString(text, myFont);
|
||||||
|
xSize = stringSize.Width;
|
||||||
|
ySize = stringSize.Height;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region IRegionModule Members
|
#region IRegionModule Members
|
||||||
|
@ -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,53 +303,64 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Bitmap bitmap;
|
Bitmap bitmap = null;
|
||||||
|
Graphics graph = null;
|
||||||
if (alpha == 256)
|
|
||||||
{
|
|
||||||
bitmap = new Bitmap(width, height, PixelFormat.Format32bppRgb);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb);
|
|
||||||
}
|
|
||||||
|
|
||||||
Graphics graph = Graphics.FromImage(bitmap);
|
|
||||||
|
|
||||||
// this is really just to save people filling the
|
|
||||||
// background color in their scripts, only do when fully opaque
|
|
||||||
if (alpha >= 255)
|
|
||||||
{
|
|
||||||
graph.FillRectangle(new SolidBrush(bgColor), 0, 0, width, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int w = 0; w < bitmap.Width; w++)
|
|
||||||
{
|
|
||||||
if (alpha <= 255)
|
|
||||||
{
|
|
||||||
for (int h = 0; h < bitmap.Height; h++)
|
|
||||||
{
|
|
||||||
bitmap.SetPixel(w, h, Color.FromArgb(alpha, bitmap.GetPixel(w, h)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
GDIDraw(data, graph, altDataDelim);
|
|
||||||
|
|
||||||
byte[] imageJ2000 = new byte[0];
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
imageJ2000 = OpenJPEG.EncodeFromImage(bitmap, true);
|
if (alpha == 256)
|
||||||
}
|
bitmap = new Bitmap(width, height, PixelFormat.Format32bppRgb);
|
||||||
catch (Exception e)
|
else
|
||||||
{
|
bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb);
|
||||||
m_log.ErrorFormat(
|
|
||||||
"[VECTORRENDERMODULE]: OpenJpeg Encode Failed. Exception {0}{1}",
|
|
||||||
e.Message, e.StackTrace);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_textureManager.ReturnData(id, imageJ2000);
|
graph = Graphics.FromImage(bitmap);
|
||||||
|
|
||||||
|
// this is really just to save people filling the
|
||||||
|
// background color in their scripts, only do when fully opaque
|
||||||
|
if (alpha >= 255)
|
||||||
|
{
|
||||||
|
using (SolidBrush bgFillBrush = new SolidBrush(bgColor))
|
||||||
|
{
|
||||||
|
graph.FillRectangle(bgFillBrush, 0, 0, width, height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int w = 0; w < bitmap.Width; w++)
|
||||||
|
{
|
||||||
|
if (alpha <= 255)
|
||||||
|
{
|
||||||
|
for (int h = 0; h < bitmap.Height; h++)
|
||||||
|
{
|
||||||
|
bitmap.SetPixel(w, h, Color.FromArgb(alpha, bitmap.GetPixel(w, h)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GDIDraw(data, graph, altDataDelim);
|
||||||
|
|
||||||
|
byte[] imageJ2000 = new byte[0];
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
imageJ2000 = OpenJPEG.EncodeFromImage(bitmap, true);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[VECTORRENDERMODULE]: OpenJpeg Encode Failed. Exception {0}{1}",
|
||||||
|
e.Message, e.StackTrace);
|
||||||
|
}
|
||||||
|
|
||||||
|
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,237 +422,284 @@ 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;
|
||||||
string fontName = m_fontName;
|
Font myFont = null;
|
||||||
float fontSize = 14;
|
SolidBrush myBrush = null;
|
||||||
Font myFont = new Font(fontName, fontSize);
|
|
||||||
SolidBrush myBrush = new SolidBrush(Color.Black);
|
|
||||||
|
|
||||||
char[] lineDelimiter = {dataDelim};
|
|
||||||
char[] partsDelimiter = {','};
|
|
||||||
string[] lines = data.Split(lineDelimiter);
|
|
||||||
|
|
||||||
foreach (string line in lines)
|
try
|
||||||
{
|
{
|
||||||
string nextLine = line.Trim();
|
drawPen = new Pen(Color.Black, 7);
|
||||||
//replace with switch, or even better, do some proper parsing
|
string fontName = m_fontName;
|
||||||
if (nextLine.StartsWith("MoveTo"))
|
float fontSize = 14;
|
||||||
|
myFont = new Font(fontName, fontSize);
|
||||||
|
myBrush = new SolidBrush(Color.Black);
|
||||||
|
|
||||||
|
char[] lineDelimiter = {dataDelim};
|
||||||
|
char[] partsDelimiter = {','};
|
||||||
|
string[] lines = data.Split(lineDelimiter);
|
||||||
|
|
||||||
|
foreach (string line in lines)
|
||||||
{
|
{
|
||||||
float x = 0;
|
string nextLine = line.Trim();
|
||||||
float y = 0;
|
//replace with switch, or even better, do some proper parsing
|
||||||
GetParams(partsDelimiter, ref nextLine, 6, ref x, ref y);
|
if (nextLine.StartsWith("MoveTo"))
|
||||||
startPoint.X = (int) x;
|
|
||||||
startPoint.Y = (int) y;
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("LineTo"))
|
|
||||||
{
|
|
||||||
float x = 0;
|
|
||||||
float y = 0;
|
|
||||||
GetParams(partsDelimiter, ref nextLine, 6, ref x, ref y);
|
|
||||||
endPoint.X = (int) x;
|
|
||||||
endPoint.Y = (int) y;
|
|
||||||
graph.DrawLine(drawPen, startPoint, endPoint);
|
|
||||||
startPoint.X = endPoint.X;
|
|
||||||
startPoint.Y = endPoint.Y;
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("Text"))
|
|
||||||
{
|
|
||||||
nextLine = nextLine.Remove(0, 4);
|
|
||||||
nextLine = nextLine.Trim();
|
|
||||||
graph.DrawString(nextLine, myFont, myBrush, startPoint);
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("Image"))
|
|
||||||
{
|
|
||||||
float x = 0;
|
|
||||||
float y = 0;
|
|
||||||
GetParams(partsDelimiter, ref nextLine, 5, ref x, ref y);
|
|
||||||
endPoint.X = (int) x;
|
|
||||||
endPoint.Y = (int) y;
|
|
||||||
Image image = ImageHttpRequest(nextLine);
|
|
||||||
if (image != null)
|
|
||||||
{
|
{
|
||||||
graph.DrawImage(image, (float)startPoint.X, (float)startPoint.Y, x, y);
|
float x = 0;
|
||||||
|
float y = 0;
|
||||||
|
GetParams(partsDelimiter, ref nextLine, 6, ref x, ref y);
|
||||||
|
startPoint.X = (int) x;
|
||||||
|
startPoint.Y = (int) y;
|
||||||
}
|
}
|
||||||
else
|
else if (nextLine.StartsWith("LineTo"))
|
||||||
{
|
{
|
||||||
graph.DrawString("URL couldn't be resolved or is", new Font(m_fontName,6),
|
float x = 0;
|
||||||
myBrush, startPoint);
|
float y = 0;
|
||||||
graph.DrawString("not an image. Please check URL.", new Font(m_fontName, 6),
|
GetParams(partsDelimiter, ref nextLine, 6, ref x, ref y);
|
||||||
myBrush, new Point(startPoint.X, 12 + startPoint.Y));
|
endPoint.X = (int) x;
|
||||||
|
endPoint.Y = (int) y;
|
||||||
|
graph.DrawLine(drawPen, startPoint, endPoint);
|
||||||
|
startPoint.X = endPoint.X;
|
||||||
|
startPoint.Y = endPoint.Y;
|
||||||
|
}
|
||||||
|
else if (nextLine.StartsWith("Text"))
|
||||||
|
{
|
||||||
|
nextLine = nextLine.Remove(0, 4);
|
||||||
|
nextLine = nextLine.Trim();
|
||||||
|
graph.DrawString(nextLine, myFont, myBrush, startPoint);
|
||||||
|
}
|
||||||
|
else if (nextLine.StartsWith("Image"))
|
||||||
|
{
|
||||||
|
float x = 0;
|
||||||
|
float y = 0;
|
||||||
|
GetParams(partsDelimiter, ref nextLine, 5, ref x, ref y);
|
||||||
|
endPoint.X = (int) x;
|
||||||
|
endPoint.Y = (int) y;
|
||||||
|
|
||||||
|
using (Image image = ImageHttpRequest(nextLine))
|
||||||
|
{
|
||||||
|
if (image != null)
|
||||||
|
{
|
||||||
|
graph.DrawImage(image, (float)startPoint.X, (float)startPoint.Y, x, y);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
using (Font errorFont = new Font(m_fontName,6))
|
||||||
|
{
|
||||||
|
graph.DrawString("URL couldn't be resolved or is", errorFont,
|
||||||
|
myBrush, startPoint);
|
||||||
|
graph.DrawString("not an image. Please check URL.", errorFont,
|
||||||
|
myBrush, new Point(startPoint.X, 12 + startPoint.Y));
|
||||||
|
}
|
||||||
|
|
||||||
|
graph.DrawRectangle(drawPen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
startPoint.X += endPoint.X;
|
||||||
|
startPoint.Y += endPoint.Y;
|
||||||
|
}
|
||||||
|
else if (nextLine.StartsWith("Rectangle"))
|
||||||
|
{
|
||||||
|
float x = 0;
|
||||||
|
float y = 0;
|
||||||
|
GetParams(partsDelimiter, ref nextLine, 9, ref x, ref y);
|
||||||
|
endPoint.X = (int) x;
|
||||||
|
endPoint.Y = (int) 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.Y += endPoint.Y;
|
||||||
}
|
}
|
||||||
startPoint.X += endPoint.X;
|
else if (nextLine.StartsWith("FillRectangle"))
|
||||||
startPoint.Y += endPoint.Y;
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("Rectangle"))
|
|
||||||
{
|
|
||||||
float x = 0;
|
|
||||||
float y = 0;
|
|
||||||
GetParams(partsDelimiter, ref nextLine, 9, ref x, ref y);
|
|
||||||
endPoint.X = (int) x;
|
|
||||||
endPoint.Y = (int) y;
|
|
||||||
graph.DrawRectangle(drawPen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y);
|
|
||||||
startPoint.X += endPoint.X;
|
|
||||||
startPoint.Y += endPoint.Y;
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("FillRectangle"))
|
|
||||||
{
|
|
||||||
float x = 0;
|
|
||||||
float y = 0;
|
|
||||||
GetParams(partsDelimiter, ref nextLine, 13, ref x, ref y);
|
|
||||||
endPoint.X = (int) x;
|
|
||||||
endPoint.Y = (int) y;
|
|
||||||
graph.FillRectangle(myBrush, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y);
|
|
||||||
startPoint.X += endPoint.X;
|
|
||||||
startPoint.Y += endPoint.Y;
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("FillPolygon"))
|
|
||||||
{
|
|
||||||
PointF[] points = null;
|
|
||||||
GetParams(partsDelimiter, ref nextLine, 11, ref points);
|
|
||||||
graph.FillPolygon(myBrush, points);
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("Polygon"))
|
|
||||||
{
|
|
||||||
PointF[] points = null;
|
|
||||||
GetParams(partsDelimiter, ref nextLine, 7, ref points);
|
|
||||||
graph.DrawPolygon(drawPen, points);
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("Ellipse"))
|
|
||||||
{
|
|
||||||
float x = 0;
|
|
||||||
float y = 0;
|
|
||||||
GetParams(partsDelimiter, ref nextLine, 7, ref x, ref y);
|
|
||||||
endPoint.X = (int)x;
|
|
||||||
endPoint.Y = (int)y;
|
|
||||||
graph.DrawEllipse(drawPen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y);
|
|
||||||
startPoint.X += endPoint.X;
|
|
||||||
startPoint.Y += endPoint.Y;
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("FontSize"))
|
|
||||||
{
|
|
||||||
nextLine = nextLine.Remove(0, 8);
|
|
||||||
nextLine = nextLine.Trim();
|
|
||||||
fontSize = Convert.ToSingle(nextLine, CultureInfo.InvariantCulture);
|
|
||||||
myFont = new Font(fontName, fontSize);
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("FontProp"))
|
|
||||||
{
|
|
||||||
nextLine = nextLine.Remove(0, 8);
|
|
||||||
nextLine = nextLine.Trim();
|
|
||||||
|
|
||||||
string[] fprops = nextLine.Split(partsDelimiter);
|
|
||||||
foreach (string prop in fprops)
|
|
||||||
{
|
{
|
||||||
|
float x = 0;
|
||||||
|
float y = 0;
|
||||||
|
GetParams(partsDelimiter, ref nextLine, 13, ref x, ref y);
|
||||||
|
endPoint.X = (int) x;
|
||||||
|
endPoint.Y = (int) y;
|
||||||
|
graph.FillRectangle(myBrush, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y);
|
||||||
|
startPoint.X += endPoint.X;
|
||||||
|
startPoint.Y += endPoint.Y;
|
||||||
|
}
|
||||||
|
else if (nextLine.StartsWith("FillPolygon"))
|
||||||
|
{
|
||||||
|
PointF[] points = null;
|
||||||
|
GetParams(partsDelimiter, ref nextLine, 11, ref points);
|
||||||
|
graph.FillPolygon(myBrush, points);
|
||||||
|
}
|
||||||
|
else if (nextLine.StartsWith("Polygon"))
|
||||||
|
{
|
||||||
|
PointF[] points = null;
|
||||||
|
GetParams(partsDelimiter, ref nextLine, 7, ref points);
|
||||||
|
graph.DrawPolygon(drawPen, points);
|
||||||
|
}
|
||||||
|
else if (nextLine.StartsWith("Ellipse"))
|
||||||
|
{
|
||||||
|
float x = 0;
|
||||||
|
float y = 0;
|
||||||
|
GetParams(partsDelimiter, ref nextLine, 7, ref x, ref y);
|
||||||
|
endPoint.X = (int)x;
|
||||||
|
endPoint.Y = (int)y;
|
||||||
|
graph.DrawEllipse(drawPen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y);
|
||||||
|
startPoint.X += endPoint.X;
|
||||||
|
startPoint.Y += endPoint.Y;
|
||||||
|
}
|
||||||
|
else if (nextLine.StartsWith("FontSize"))
|
||||||
|
{
|
||||||
|
nextLine = nextLine.Remove(0, 8);
|
||||||
|
nextLine = nextLine.Trim();
|
||||||
|
fontSize = Convert.ToSingle(nextLine, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
switch (prop)
|
myFont.Dispose();
|
||||||
|
myFont = new Font(fontName, fontSize);
|
||||||
|
}
|
||||||
|
else if (nextLine.StartsWith("FontProp"))
|
||||||
|
{
|
||||||
|
nextLine = nextLine.Remove(0, 8);
|
||||||
|
nextLine = nextLine.Trim();
|
||||||
|
|
||||||
|
string[] fprops = nextLine.Split(partsDelimiter);
|
||||||
|
foreach (string prop in fprops)
|
||||||
{
|
{
|
||||||
case "B":
|
|
||||||
if (!(myFont.Bold))
|
switch (prop)
|
||||||
myFont = new Font(myFont, myFont.Style | FontStyle.Bold);
|
{
|
||||||
break;
|
case "B":
|
||||||
case "I":
|
if (!(myFont.Bold))
|
||||||
if (!(myFont.Italic))
|
{
|
||||||
myFont = new Font(myFont, myFont.Style | FontStyle.Italic);
|
Font newFont = new Font(myFont, myFont.Style | FontStyle.Bold);
|
||||||
break;
|
myFont.Dispose();
|
||||||
case "U":
|
myFont = newFont;
|
||||||
if (!(myFont.Underline))
|
}
|
||||||
myFont = new Font(myFont, myFont.Style | FontStyle.Underline);
|
break;
|
||||||
break;
|
case "I":
|
||||||
case "S":
|
if (!(myFont.Italic))
|
||||||
if (!(myFont.Strikeout))
|
{
|
||||||
myFont = new Font(myFont, myFont.Style | FontStyle.Strikeout);
|
Font newFont = new Font(myFont, myFont.Style | FontStyle.Italic);
|
||||||
break;
|
myFont.Dispose();
|
||||||
case "R":
|
myFont = newFont;
|
||||||
myFont = new Font(myFont, FontStyle.Regular);
|
}
|
||||||
break;
|
break;
|
||||||
|
case "U":
|
||||||
|
if (!(myFont.Underline))
|
||||||
|
{
|
||||||
|
Font newFont = new Font(myFont, myFont.Style | FontStyle.Underline);
|
||||||
|
myFont.Dispose();
|
||||||
|
myFont = newFont;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "S":
|
||||||
|
if (!(myFont.Strikeout))
|
||||||
|
{
|
||||||
|
Font newFont = new Font(myFont, myFont.Style | FontStyle.Strikeout);
|
||||||
|
myFont.Dispose();
|
||||||
|
myFont = newFont;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "R":
|
||||||
|
Font newFont = new Font(myFont, FontStyle.Regular);
|
||||||
|
myFont.Dispose();
|
||||||
|
myFont = newFont;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else if (nextLine.StartsWith("FontName"))
|
||||||
else if (nextLine.StartsWith("FontName"))
|
|
||||||
{
|
|
||||||
nextLine = nextLine.Remove(0, 8);
|
|
||||||
fontName = nextLine.Trim();
|
|
||||||
myFont = new Font(fontName, fontSize);
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("PenSize"))
|
|
||||||
{
|
|
||||||
nextLine = nextLine.Remove(0, 7);
|
|
||||||
nextLine = nextLine.Trim();
|
|
||||||
float size = Convert.ToSingle(nextLine, CultureInfo.InvariantCulture);
|
|
||||||
drawPen.Width = size;
|
|
||||||
}
|
|
||||||
else if (nextLine.StartsWith("PenCap"))
|
|
||||||
{
|
|
||||||
bool start = true, end = true;
|
|
||||||
nextLine = nextLine.Remove(0, 6);
|
|
||||||
nextLine = nextLine.Trim();
|
|
||||||
string[] cap = nextLine.Split(partsDelimiter);
|
|
||||||
if (cap[0].ToLower() == "start")
|
|
||||||
end = false;
|
|
||||||
else if (cap[0].ToLower() == "end")
|
|
||||||
start = false;
|
|
||||||
else if (cap[0].ToLower() != "both")
|
|
||||||
return;
|
|
||||||
string type = cap[1].ToLower();
|
|
||||||
|
|
||||||
if (end)
|
|
||||||
{
|
{
|
||||||
switch (type)
|
nextLine = nextLine.Remove(0, 8);
|
||||||
|
fontName = nextLine.Trim();
|
||||||
|
myFont.Dispose();
|
||||||
|
myFont = new Font(fontName, fontSize);
|
||||||
|
}
|
||||||
|
else if (nextLine.StartsWith("PenSize"))
|
||||||
|
{
|
||||||
|
nextLine = nextLine.Remove(0, 7);
|
||||||
|
nextLine = nextLine.Trim();
|
||||||
|
float size = Convert.ToSingle(nextLine, CultureInfo.InvariantCulture);
|
||||||
|
drawPen.Width = size;
|
||||||
|
}
|
||||||
|
else if (nextLine.StartsWith("PenCap"))
|
||||||
|
{
|
||||||
|
bool start = true, end = true;
|
||||||
|
nextLine = nextLine.Remove(0, 6);
|
||||||
|
nextLine = nextLine.Trim();
|
||||||
|
string[] cap = nextLine.Split(partsDelimiter);
|
||||||
|
if (cap[0].ToLower() == "start")
|
||||||
|
end = false;
|
||||||
|
else if (cap[0].ToLower() == "end")
|
||||||
|
start = false;
|
||||||
|
else if (cap[0].ToLower() != "both")
|
||||||
|
return;
|
||||||
|
string type = cap[1].ToLower();
|
||||||
|
|
||||||
|
if (end)
|
||||||
{
|
{
|
||||||
case "arrow":
|
switch (type)
|
||||||
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
|
{
|
||||||
break;
|
case "arrow":
|
||||||
case "round":
|
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
|
||||||
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
|
break;
|
||||||
break;
|
case "round":
|
||||||
case "diamond":
|
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
|
||||||
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor;
|
break;
|
||||||
break;
|
case "diamond":
|
||||||
case "flat":
|
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor;
|
||||||
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.Flat;
|
break;
|
||||||
break;
|
case "flat":
|
||||||
|
drawPen.EndCap = System.Drawing.Drawing2D.LineCap.Flat;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (start)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case "arrow":
|
||||||
|
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
|
||||||
|
break;
|
||||||
|
case "round":
|
||||||
|
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
|
||||||
|
break;
|
||||||
|
case "diamond":
|
||||||
|
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor;
|
||||||
|
break;
|
||||||
|
case "flat":
|
||||||
|
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.Flat;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (start)
|
else if (nextLine.StartsWith("PenColour") || nextLine.StartsWith("PenColor"))
|
||||||
{
|
{
|
||||||
switch (type)
|
nextLine = nextLine.Remove(0, 9);
|
||||||
|
nextLine = nextLine.Trim();
|
||||||
|
int hex = 0;
|
||||||
|
|
||||||
|
Color newColor;
|
||||||
|
if (Int32.TryParse(nextLine, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out hex))
|
||||||
{
|
{
|
||||||
case "arrow":
|
newColor = Color.FromArgb(hex);
|
||||||
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
|
|
||||||
break;
|
|
||||||
case "round":
|
|
||||||
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
|
|
||||||
break;
|
|
||||||
case "diamond":
|
|
||||||
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor;
|
|
||||||
break;
|
|
||||||
case "flat":
|
|
||||||
drawPen.StartCap = System.Drawing.Drawing2D.LineCap.Flat;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// this doesn't fail, it just returns black if nothing is found
|
||||||
|
newColor = Color.FromName(nextLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
myBrush.Color = newColor;
|
||||||
|
drawPen.Color = newColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (nextLine.StartsWith("PenColour") || nextLine.StartsWith("PenColor"))
|
}
|
||||||
{
|
finally
|
||||||
nextLine = nextLine.Remove(0, 9);
|
{
|
||||||
nextLine = nextLine.Trim();
|
if (drawPen != null)
|
||||||
int hex = 0;
|
drawPen.Dispose();
|
||||||
|
|
||||||
Color newColor;
|
if (myFont != null)
|
||||||
if (Int32.TryParse(nextLine, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out hex))
|
myFont.Dispose();
|
||||||
{
|
|
||||||
newColor = Color.FromArgb(hex);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// this doesn't fail, it just returns black if nothing is found
|
|
||||||
newColor = Color.FromName(nextLine);
|
|
||||||
}
|
|
||||||
|
|
||||||
myBrush.Color = newColor;
|
if (myBrush != null)
|
||||||
drawPen.Color = newColor;
|
myBrush.Dispose();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -691,7 +753,7 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
WebRequest request = HttpWebRequest.Create(url);
|
WebRequest request = HttpWebRequest.Create(url);
|
||||||
//Ckrinke: Comment out for now as 'str' is unused. Bring it back into play later when it is used.
|
//Ckrinke: Comment out for now as 'str' is unused. Bring it back into play later when it is used.
|
||||||
//Ckrinke Stream str = null;
|
//Ckrinke Stream str = null;
|
||||||
HttpWebResponse response = (HttpWebResponse)(request).GetResponse();
|
HttpWebResponse response = (HttpWebResponse)(request).GetResponse();
|
||||||
|
@ -702,7 +764,8 @@ 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,7 +213,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
m_assetsArchiver.ForceClose();
|
if (close)
|
||||||
|
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;
|
||||||
|
|
||||||
|
|
|
@ -2131,7 +2131,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
|
if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
|
||||||
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()
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,12 +54,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
|
|
||||||
private bool m_debugEnabled = false;
|
private bool m_debugEnabled = false;
|
||||||
|
|
||||||
public const GroupPowers m_DefaultEveryonePowers = GroupPowers.AllowSetHome |
|
public const GroupPowers m_DefaultEveryonePowers = GroupPowers.AllowSetHome |
|
||||||
GroupPowers.Accountable |
|
GroupPowers.Accountable |
|
||||||
GroupPowers.JoinChat |
|
GroupPowers.JoinChat |
|
||||||
GroupPowers.AllowVoiceChat |
|
GroupPowers.AllowVoiceChat |
|
||||||
GroupPowers.ReceiveNotices |
|
GroupPowers.ReceiveNotices |
|
||||||
GroupPowers.StartProposal |
|
GroupPowers.StartProposal |
|
||||||
GroupPowers.VoteOnProposal;
|
GroupPowers.VoteOnProposal;
|
||||||
|
|
||||||
private bool m_connectorEnabled = false;
|
private bool m_connectorEnabled = false;
|
||||||
|
@ -201,8 +201,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create a Group, including Everyone and Owners Role, place FounderID in both groups, select Owner as selected role, and newly created group as agent's active role.
|
/// Create a Group, including Everyone and Owners Role, place FounderID in both groups, select Owner as selected role, and newly created group as agent's active role.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public UUID CreateGroup(UUID requestingAgentID, string name, string charter, bool showInList, UUID insigniaID,
|
public UUID CreateGroup(UUID requestingAgentID, string name, string charter, bool showInList, UUID insigniaID,
|
||||||
int membershipFee, bool openEnrollment, bool allowPublish,
|
int membershipFee, bool openEnrollment, bool allowPublish,
|
||||||
bool maturePublish, UUID founderID)
|
bool maturePublish, UUID founderID)
|
||||||
{
|
{
|
||||||
UUID GroupID = UUID.Random();
|
UUID GroupID = UUID.Random();
|
||||||
|
@ -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;
|
||||||
|
@ -285,8 +285,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
return UUID.Parse((string)respData["GroupID"]);
|
return UUID.Parse((string)respData["GroupID"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateGroup(UUID requestingAgentID, UUID groupID, string charter, bool showInList,
|
public void UpdateGroup(UUID requestingAgentID, UUID groupID, string charter, bool showInList,
|
||||||
UUID insigniaID, int membershipFee, bool openEnrollment,
|
UUID insigniaID, int membershipFee, bool openEnrollment,
|
||||||
bool allowPublish, bool maturePublish)
|
bool allowPublish, bool maturePublish)
|
||||||
{
|
{
|
||||||
Hashtable param = new Hashtable();
|
Hashtable param = new Hashtable();
|
||||||
|
@ -302,7 +302,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
XmlRpcCall(requestingAgentID, "groups.updateGroup", param);
|
XmlRpcCall(requestingAgentID, "groups.updateGroup", param);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddGroupRole(UUID requestingAgentID, UUID groupID, UUID roleID, string name, string description,
|
public void AddGroupRole(UUID requestingAgentID, UUID groupID, UUID roleID, string name, string description,
|
||||||
string title, ulong powers)
|
string title, ulong powers)
|
||||||
{
|
{
|
||||||
Hashtable param = new Hashtable();
|
Hashtable param = new Hashtable();
|
||||||
|
@ -325,7 +325,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
XmlRpcCall(requestingAgentID, "groups.removeRoleFromGroup", param);
|
XmlRpcCall(requestingAgentID, "groups.removeRoleFromGroup", param);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateGroupRole(UUID requestingAgentID, UUID groupID, UUID roleID, string name, string description,
|
public void UpdateGroupRole(UUID requestingAgentID, UUID groupID, UUID roleID, string name, string description,
|
||||||
string title, ulong powers)
|
string title, ulong powers)
|
||||||
{
|
{
|
||||||
Hashtable param = new Hashtable();
|
Hashtable param = new Hashtable();
|
||||||
|
@ -580,7 +580,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
memberships.Add(HashTableToGroupMembershipData((Hashtable)membership));
|
memberships.Add(HashTableToGroupMembershipData((Hashtable)membership));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return memberships;
|
return memberships;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -800,9 +800,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
|
|
||||||
public bool hasAgentDroppedGroupChatSession(UUID agentID, UUID groupID)
|
public bool hasAgentDroppedGroupChatSession(UUID agentID, UUID groupID)
|
||||||
{
|
{
|
||||||
// If we're tracking drops for this group,
|
// If we're tracking drops for this group,
|
||||||
// and we find them, well... then they've dropped
|
// and we find them, well... then they've dropped
|
||||||
return m_groupsAgentsDroppedFromChatSession.ContainsKey(groupID)
|
return m_groupsAgentsDroppedFromChatSession.ContainsKey(groupID)
|
||||||
&& m_groupsAgentsDroppedFromChatSession[groupID].Contains(agentID);
|
&& m_groupsAgentsDroppedFromChatSession[groupID].Contains(agentID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -888,7 +888,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
|
|
||||||
return group;
|
return group;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static GroupMembershipData HashTableToGroupMembershipData(Hashtable respData)
|
private static GroupMembershipData HashTableToGroupMembershipData(Hashtable respData)
|
||||||
{
|
{
|
||||||
GroupMembershipData data = new GroupMembershipData();
|
GroupMembershipData data = new GroupMembershipData();
|
||||||
|
@ -921,7 +921,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
data.MembershipFee = int.Parse((string)respData["MembershipFee"]);
|
data.MembershipFee = int.Parse((string)respData["MembershipFee"]);
|
||||||
data.OpenEnrollment = ((string)respData["OpenEnrollment"] == "1");
|
data.OpenEnrollment = ((string)respData["OpenEnrollment"] == "1");
|
||||||
data.ShowInList = ((string)respData["ShowInList"] == "1");
|
data.ShowInList = ((string)respData["ShowInList"] == "1");
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -958,7 +958,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
m_memoryCache.TryGetValue(CacheKey, out resp);
|
m_memoryCache.TryGetValue(CacheKey, out resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resp == null)
|
if (resp == null)
|
||||||
{
|
{
|
||||||
if (m_debugEnabled)
|
if (m_debugEnabled)
|
||||||
|
@ -967,7 +967,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
string UserService;
|
string UserService;
|
||||||
UUID SessionID;
|
UUID SessionID;
|
||||||
GetClientGroupRequestID(requestingAgentID, out UserService, out SessionID);
|
GetClientGroupRequestID(requestingAgentID, out UserService, out SessionID);
|
||||||
|
|
||||||
param.Add("RequestingAgentID", requestingAgentID.ToString());
|
param.Add("RequestingAgentID", requestingAgentID.ToString());
|
||||||
param.Add("RequestingAgentUserService", UserService);
|
param.Add("RequestingAgentUserService", UserService);
|
||||||
param.Add("RequestingSessionID", SessionID.ToString());
|
param.Add("RequestingSessionID", SessionID.ToString());
|
||||||
|
@ -992,9 +992,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[XMLRPC-GROUPS-CONNECTOR]: An error has occured while attempting to access the XmlRpcGroups server method {0} at {1}",
|
"[XMLRPC-GROUPS-CONNECTOR]: An error has occured while attempting to access the XmlRpcGroups server method {0} at {1}",
|
||||||
function, m_groupsServerURI);
|
function, m_groupsServerURI);
|
||||||
|
|
||||||
m_log.ErrorFormat("[XMLRPC-GROUPS-CONNECTOR]: {0}{1}", e.Message, e.StackTrace);
|
m_log.ErrorFormat("[XMLRPC-GROUPS-CONNECTOR]: {0}{1}", e.Message, e.StackTrace);
|
||||||
|
|
||||||
foreach (string ResponseLine in req.RequestResponse.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
|
foreach (string ResponseLine in req.RequestResponse.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
|
||||||
|
@ -1061,9 +1061,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Group Request Tokens are an attempt to allow the groups service to authenticate
|
/// Group Request Tokens are an attempt to allow the groups service to authenticate
|
||||||
/// requests.
|
/// requests.
|
||||||
/// TODO: This broke after the big grid refactor, either find a better way, or discard this
|
/// TODO: This broke after the big grid refactor, either find a better way, or discard this
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1103,7 +1103,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
out updatedEntityCount, out updatedEntitiesPtr, out collidersCount, out collidersPtr);
|
try
|
||||||
|
{
|
||||||
|
numSubSteps = BulletSimAPI.PhysicsStep(m_worldID, timeStep, m_maxSubSteps, m_fixedTimeStep,
|
||||||
|
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