Merge branch 'careminster' into avination
commit
eb4c092cac
|
@ -27,11 +27,49 @@
|
|||
|
||||
using System;
|
||||
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,
|
||||
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) {
|
||||
lock (m_graph)
|
||||
{
|
||||
stringSize = m_graph.MeasureString(text, myFont);
|
||||
xSize = stringSize.Width;
|
||||
ySize = stringSize.Height;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -121,6 +123,8 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
|||
|
||||
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);
|
||||
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)
|
||||
{
|
||||
bitmap = new Bitmap(width, height, PixelFormat.Format32bppRgb);
|
||||
}
|
||||
else
|
||||
{
|
||||
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
|
||||
// background color in their scripts, only do when fully opaque
|
||||
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++)
|
||||
|
@ -347,6 +353,15 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
|||
|
||||
m_textureManager.ReturnData(id, imageJ2000);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (graph != null)
|
||||
graph.Dispose();
|
||||
|
||||
if (bitmap != null)
|
||||
bitmap.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private int parseIntParam(string strInt)
|
||||
{
|
||||
|
@ -407,11 +422,17 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
|||
{
|
||||
Point startPoint = 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;
|
||||
float fontSize = 14;
|
||||
Font myFont = new Font(fontName, fontSize);
|
||||
SolidBrush myBrush = new SolidBrush(Color.Black);
|
||||
myFont = new Font(fontName, fontSize);
|
||||
myBrush = new SolidBrush(Color.Black);
|
||||
|
||||
char[] lineDelimiter = {dataDelim};
|
||||
char[] partsDelimiter = {','};
|
||||
|
@ -453,19 +474,27 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
|||
GetParams(partsDelimiter, ref nextLine, 5, ref x, ref y);
|
||||
endPoint.X = (int) x;
|
||||
endPoint.Y = (int) y;
|
||||
Image image = ImageHttpRequest(nextLine);
|
||||
|
||||
using (Image image = ImageHttpRequest(nextLine))
|
||||
{
|
||||
if (image != null)
|
||||
{
|
||||
graph.DrawImage(image, (float)startPoint.X, (float)startPoint.Y, x, y);
|
||||
}
|
||||
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);
|
||||
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));
|
||||
}
|
||||
|
||||
graph.DrawRectangle(drawPen, startPoint.X, startPoint.Y, endPoint.X, endPoint.Y);
|
||||
}
|
||||
}
|
||||
|
||||
startPoint.X += endPoint.X;
|
||||
startPoint.Y += endPoint.Y;
|
||||
}
|
||||
|
@ -519,6 +548,8 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
|||
nextLine = nextLine.Remove(0, 8);
|
||||
nextLine = nextLine.Trim();
|
||||
fontSize = Convert.ToSingle(nextLine, CultureInfo.InvariantCulture);
|
||||
|
||||
myFont.Dispose();
|
||||
myFont = new Font(fontName, fontSize);
|
||||
}
|
||||
else if (nextLine.StartsWith("FontProp"))
|
||||
|
@ -534,22 +565,40 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
|||
{
|
||||
case "B":
|
||||
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;
|
||||
case "I":
|
||||
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;
|
||||
case "U":
|
||||
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;
|
||||
case "S":
|
||||
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;
|
||||
case "R":
|
||||
myFont = new Font(myFont, FontStyle.Regular);
|
||||
Font newFont = new Font(myFont, FontStyle.Regular);
|
||||
myFont.Dispose();
|
||||
myFont = newFont;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -558,6 +607,7 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
|||
{
|
||||
nextLine = nextLine.Remove(0, 8);
|
||||
fontName = nextLine.Trim();
|
||||
myFont.Dispose();
|
||||
myFont = new Font(fontName, fontSize);
|
||||
}
|
||||
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)
|
||||
{
|
||||
|
@ -702,6 +764,7 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
|||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -154,6 +154,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
|
||||
protected void OnRequestCallbackTimeout(object source, ElapsedEventArgs args)
|
||||
{
|
||||
bool close = true;
|
||||
|
||||
try
|
||||
{
|
||||
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
|
||||
// the final request came in (assuming that such a thing is possible)
|
||||
if (m_requestState == RequestState.Completed)
|
||||
{
|
||||
close = false;
|
||||
return;
|
||||
}
|
||||
|
||||
m_requestState = RequestState.Aborted;
|
||||
}
|
||||
|
@ -208,6 +213,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
}
|
||||
finally
|
||||
{
|
||||
if (close)
|
||||
m_assetsArchiver.ForceClose();
|
||||
}
|
||||
}
|
||||
|
@ -242,11 +248,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
|
||||
m_requestCallbackTimer.Stop();
|
||||
|
||||
if (m_requestState == RequestState.Aborted)
|
||||
if ((m_requestState == RequestState.Aborted) || (m_requestState == RequestState.Completed))
|
||||
{
|
||||
m_log.WarnFormat(
|
||||
"[ARCHIVER]: Received information about asset {0} after archive save abortion. Ignoring.",
|
||||
id);
|
||||
"[ARCHIVER]: Received information about asset {0} while in state {1}. Ignoring.",
|
||||
id, m_requestState);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -264,7 +270,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
|||
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;
|
||||
|
||||
|
|
|
@ -2284,6 +2284,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
sourcePart.Inventory.RemoveInventoryItem(item.ItemID);
|
||||
}
|
||||
|
||||
group.FromPartID = sourcePart.UUID;
|
||||
AddNewSceneObject(group, true, pos, rot, vel);
|
||||
|
||||
// We can only call this after adding the scene object, since the scene object references the scene
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
|
@ -910,6 +911,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// </remarks>
|
||||
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>
|
||||
/// The folder ID that this object was rezzed from, if applicable.
|
||||
/// </summary>
|
||||
|
@ -941,6 +950,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// The original SceneObjectPart will be used rather than a copy, preserving
|
||||
/// its existing localID and UUID.
|
||||
/// </summary>
|
||||
/// <param name='part'>Root part for this scene object.</param>
|
||||
public SceneObjectGroup(SceneObjectPart part)
|
||||
{
|
||||
SetRootPart(part);
|
||||
|
|
|
@ -3081,7 +3081,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
/// <summary>
|
||||
/// 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>
|
||||
public void ScheduleTerseUpdate()
|
||||
{
|
||||
|
|
|
@ -214,7 +214,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
|
|||
param["Charter"] = charter;
|
||||
param["ShowInList"] = showInList == true ? 1 : 0;
|
||||
param["InsigniaID"] = insigniaID.ToString();
|
||||
param["MembershipFee"] = 0;
|
||||
param["MembershipFee"] = membershipFee;
|
||||
param["OpenEnrollment"] = openEnrollment == true ? 1 : 0;
|
||||
param["AllowPublish"] = allowPublish == true ? 1 : 0;
|
||||
param["MaturePublish"] = maturePublish == true ? 1 : 0;
|
||||
|
|
|
@ -1331,13 +1331,15 @@ public sealed class BSPrim : PhysicsActor
|
|||
|
||||
base.RequestPhysicsterseUpdate();
|
||||
}
|
||||
/*
|
||||
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}",
|
||||
LocalID, entprop.Position, entprop.Rotation, entprop.Velocity,
|
||||
entprop.Acceleration, entprop.RotationalVelocity);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// I've collided with something
|
||||
|
|
|
@ -390,9 +390,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters
|
|||
// Simulate one timestep
|
||||
public override float Simulate(float timeStep)
|
||||
{
|
||||
int updatedEntityCount;
|
||||
int updatedEntityCount = 0;
|
||||
IntPtr updatedEntitiesPtr;
|
||||
int collidersCount;
|
||||
int collidersCount = 0;
|
||||
IntPtr collidersPtr;
|
||||
|
||||
LastSimulatedTimestep = timeStep;
|
||||
|
@ -411,8 +411,21 @@ public class BSScene : PhysicsScene, IPhysicsParameters
|
|||
|
||||
// step the physical world one interval
|
||||
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);
|
||||
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
|
||||
|
||||
|
@ -711,7 +724,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters
|
|||
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.
|
||||
// We rely on C#'s closure to save and restore the context for the delegate.
|
||||
public void TaintedObject(TaintCallback callback)
|
||||
|
@ -1275,5 +1288,11 @@ public class BSScene : PhysicsScene, IPhysicsParameters
|
|||
|
||||
#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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3362,5 +3362,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
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>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
}
|
||||
|
||||
public LSL_Key osGetRezzingObject()
|
||||
{
|
||||
return m_OSSL_Functions.osGetRezzingObject();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -194,7 +194,8 @@ namespace OpenSim.Services.AssetService
|
|||
|
||||
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;
|
||||
if (!UUID.TryParse(id, out assetID))
|
||||
return false;
|
||||
|
|
|
@ -188,7 +188,8 @@ namespace OpenSim.Services.AssetService
|
|||
|
||||
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;
|
||||
if (!UUID.TryParse(id, out assetID))
|
||||
return false;
|
||||
|
|
|
@ -937,7 +937,7 @@
|
|||
FixedTimeStep = .01667
|
||||
|
||||
MaxCollisionsPerFrame = 2048
|
||||
MaxUpdatesPerFrame = 8192
|
||||
MaxUpdatesPerFrame = 2048
|
||||
|
||||
[RemoteAdmin]
|
||||
enabled = false
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -3077,13 +3077,13 @@
|
|||
-->
|
||||
<Files>
|
||||
<!-- 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="Avatar/Attachments/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/Inventory/Archiver/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 buildAction="EmbeddedResource" path="World/Archiver/Tests/Resources" pattern="*"/>
|
||||
<Match path="World/Land/Tests" pattern="*.cs" recurse="true"/>
|
||||
|
|
Loading…
Reference in New Issue