Merge branch '0.6.9-post-fixes' into careminster
commit
1f7a0cf892
|
@ -128,6 +128,7 @@ what it is today.
|
||||||
* YZh
|
* YZh
|
||||||
* Zackary Geers aka Kunnis Basiat
|
* Zackary Geers aka Kunnis Basiat
|
||||||
* Zha Ewry
|
* Zha Ewry
|
||||||
|
* ziah
|
||||||
|
|
||||||
|
|
||||||
= LSL Devs =
|
= LSL Devs =
|
||||||
|
|
|
@ -692,6 +692,8 @@ namespace OpenSim.Client.MXP.ClientStack
|
||||||
public event UUIDNameRequest OnTeleportHomeRequest;
|
public event UUIDNameRequest OnTeleportHomeRequest;
|
||||||
public event ScriptAnswer OnScriptAnswer;
|
public event ScriptAnswer OnScriptAnswer;
|
||||||
public event AgentSit OnUndo;
|
public event AgentSit OnUndo;
|
||||||
|
public event AgentSit OnRedo;
|
||||||
|
public event LandUndo OnLandUndo;
|
||||||
public event ForceReleaseControls OnForceReleaseControls;
|
public event ForceReleaseControls OnForceReleaseControls;
|
||||||
public event GodLandStatRequest OnLandStatRequest;
|
public event GodLandStatRequest OnLandStatRequest;
|
||||||
public event DetailedEstateDataRequest OnDetailedEstateDataRequest;
|
public event DetailedEstateDataRequest OnDetailedEstateDataRequest;
|
||||||
|
|
|
@ -338,6 +338,8 @@ namespace OpenSim.Client.Sirikata.ClientStack
|
||||||
public event UUIDNameRequest OnTeleportHomeRequest;
|
public event UUIDNameRequest OnTeleportHomeRequest;
|
||||||
public event ScriptAnswer OnScriptAnswer;
|
public event ScriptAnswer OnScriptAnswer;
|
||||||
public event AgentSit OnUndo;
|
public event AgentSit OnUndo;
|
||||||
|
public event AgentSit OnRedo;
|
||||||
|
public event LandUndo OnLandUndo;
|
||||||
public event ForceReleaseControls OnForceReleaseControls;
|
public event ForceReleaseControls OnForceReleaseControls;
|
||||||
public event GodLandStatRequest OnLandStatRequest;
|
public event GodLandStatRequest OnLandStatRequest;
|
||||||
public event DetailedEstateDataRequest OnDetailedEstateDataRequest;
|
public event DetailedEstateDataRequest OnDetailedEstateDataRequest;
|
||||||
|
|
|
@ -343,6 +343,8 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
|
||||||
public event UUIDNameRequest OnTeleportHomeRequest = delegate { };
|
public event UUIDNameRequest OnTeleportHomeRequest = delegate { };
|
||||||
public event ScriptAnswer OnScriptAnswer = delegate { };
|
public event ScriptAnswer OnScriptAnswer = delegate { };
|
||||||
public event AgentSit OnUndo = delegate { };
|
public event AgentSit OnUndo = delegate { };
|
||||||
|
public event AgentSit OnRedo = delegate { };
|
||||||
|
public event LandUndo OnLandUndo = delegate { };
|
||||||
public event ForceReleaseControls OnForceReleaseControls = delegate { };
|
public event ForceReleaseControls OnForceReleaseControls = delegate { };
|
||||||
public event GodLandStatRequest OnLandStatRequest = delegate { };
|
public event GodLandStatRequest OnLandStatRequest = delegate { };
|
||||||
public event DetailedEstateDataRequest OnDetailedEstateDataRequest = delegate { };
|
public event DetailedEstateDataRequest OnDetailedEstateDataRequest = delegate { };
|
||||||
|
|
|
@ -39,10 +39,6 @@ namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
public class MySQLGenericTableHandler<T> : MySqlFramework where T: class, new()
|
public class MySQLGenericTableHandler<T> : MySqlFramework where T: class, new()
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log =
|
|
||||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
|
|
||||||
|
|
||||||
protected Dictionary<string, FieldInfo> m_Fields =
|
protected Dictionary<string, FieldInfo> m_Fields =
|
||||||
new Dictionary<string, FieldInfo>();
|
new Dictionary<string, FieldInfo>();
|
||||||
|
|
||||||
|
|
|
@ -41,9 +41,6 @@ namespace OpenSim.Data.MySQL
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class MySQLXInventoryData : IXInventoryData
|
public class MySQLXInventoryData : IXInventoryData
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(
|
|
||||||
MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
|
|
||||||
private MySQLGenericTableHandler<XInventoryFolder> m_Folders;
|
private MySQLGenericTableHandler<XInventoryFolder> m_Folders;
|
||||||
private MySqlItemHandler m_Items;
|
private MySqlItemHandler m_Items;
|
||||||
|
|
||||||
|
|
|
@ -524,7 +524,7 @@ namespace OpenSim.Data.Tests
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
//[Test]
|
||||||
public void T016_RandomSogWithSceneParts()
|
public void T016_RandomSogWithSceneParts()
|
||||||
{
|
{
|
||||||
PropertyScrambler<SceneObjectPart> scrambler =
|
PropertyScrambler<SceneObjectPart> scrambler =
|
||||||
|
|
|
@ -69,7 +69,7 @@ namespace OpenSim.Framework
|
||||||
private static UUID HAIR_ASSET = new UUID("d342e6c0-b9d2-11dc-95ff-0800200c9a66");
|
private static UUID HAIR_ASSET = new UUID("d342e6c0-b9d2-11dc-95ff-0800200c9a66");
|
||||||
private static UUID HAIR_ITEM = new UUID("d342e6c1-b9d2-11dc-95ff-0800200c9a66");
|
private static UUID HAIR_ITEM = new UUID("d342e6c1-b9d2-11dc-95ff-0800200c9a66");
|
||||||
|
|
||||||
public readonly static int VISUALPARAM_COUNT = 218;
|
public readonly static int VISUALPARAM_COUNT = 218;
|
||||||
|
|
||||||
protected UUID m_owner;
|
protected UUID m_owner;
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ namespace OpenSim.Framework
|
||||||
// This sets Visual Params with *less* weirder values then default. Instead of a ugly alien, it looks like a fat scientist
|
// This sets Visual Params with *less* weirder values then default. Instead of a ugly alien, it looks like a fat scientist
|
||||||
SetDefaultParams(m_visualparams);
|
SetDefaultParams(m_visualparams);
|
||||||
SetDefaultWearables();
|
SetDefaultWearables();
|
||||||
m_texture = GetDefaultTexture();
|
m_texture = GetDefaultTexture();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AvatarAppearance(UUID avatarID, AvatarWearable[] wearables, byte[] visualParams)
|
public AvatarAppearance(UUID avatarID, AvatarWearable[] wearables, byte[] visualParams)
|
||||||
|
@ -390,11 +390,12 @@ namespace OpenSim.Framework
|
||||||
+ 0.08f * (float)m_visualparams[(int)VPElement.SHOES_PLATFORM_HEIGHT] / 255.0f // Shoe platform height
|
+ 0.08f * (float)m_visualparams[(int)VPElement.SHOES_PLATFORM_HEIGHT] / 255.0f // Shoe platform height
|
||||||
+ 0.07f * (float)m_visualparams[(int)VPElement.SHOES_HEEL_HEIGHT] / 255.0f // Shoe heel height
|
+ 0.07f * (float)m_visualparams[(int)VPElement.SHOES_HEEL_HEIGHT] / 255.0f // Shoe heel height
|
||||||
+ 0.076f * (float)m_visualparams[(int)VPElement.SHAPE_NECK_LENGTH] / 255.0f; // Neck length
|
+ 0.076f * (float)m_visualparams[(int)VPElement.SHAPE_NECK_LENGTH] / 255.0f; // Neck length
|
||||||
m_hipOffset = (0.615385f // Half of avatar
|
m_hipOffset = (((1.23077f // Half of avatar
|
||||||
|
+ 0.516945f * (float)m_visualparams[(int)VPElement.SHAPE_HEIGHT] / 255.0f // Body height
|
||||||
|
+ 0.3836f * (float)m_visualparams[(int)VPElement.SHAPE_LEG_LENGTH] / 255.0f // Leg length
|
||||||
+ 0.08f * (float)m_visualparams[(int)VPElement.SHOES_PLATFORM_HEIGHT] / 255.0f // Shoe platform height
|
+ 0.08f * (float)m_visualparams[(int)VPElement.SHOES_PLATFORM_HEIGHT] / 255.0f // Shoe platform height
|
||||||
+ 0.07f * (float)m_visualparams[(int)VPElement.SHOES_HEEL_HEIGHT] / 255.0f // Shoe heel height
|
+ 0.07f * (float)m_visualparams[(int)VPElement.SHOES_HEEL_HEIGHT] / 255.0f // Shoe heel height
|
||||||
+ 0.3836f * (float)m_visualparams[(int)VPElement.SHAPE_LEG_LENGTH] / 255.0f // Leg length
|
) / 2) - m_avatarHeight / 2) * 0.31f - 0.0425f;
|
||||||
- m_avatarHeight / 2) * 0.3f - 0.04f;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ namespace OpenSim.Framework.Console
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A console that uses cursor control and color
|
/// A console that uses cursor control and color
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class LocalConsole : CommandConsole
|
public class LocalConsole : CommandConsole
|
||||||
{
|
{
|
||||||
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
@ -100,8 +100,8 @@ namespace OpenSim.Framework.Console
|
||||||
private int SetCursorTop(int top)
|
private int SetCursorTop(int top)
|
||||||
{
|
{
|
||||||
// From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
|
// From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
|
||||||
// to set a cursor row position with a currently invalid column, mono will throw an exception.
|
// to set a cursor row position with a currently invalid column, mono will throw an exception.
|
||||||
// Therefore, we need to make sure that the column position is valid first.
|
// Therefore, we need to make sure that the column position is valid first.
|
||||||
int left = System.Console.CursorLeft;
|
int left = System.Console.CursorLeft;
|
||||||
|
|
||||||
if (left < 0)
|
if (left < 0)
|
||||||
|
@ -129,12 +129,12 @@ namespace OpenSim.Framework.Console
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <returns>
|
/// <returns>
|
||||||
/// The new cursor column.
|
/// The new cursor column.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
private int SetCursorLeft(int left)
|
private int SetCursorLeft(int left)
|
||||||
{
|
{
|
||||||
// From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
|
// From at least mono 2.4.2.3, window resizing can give mono an invalid row and column values. If we try
|
||||||
// to set a cursor column position with a currently invalid row, mono will throw an exception.
|
// to set a cursor column position with a currently invalid row, mono will throw an exception.
|
||||||
// Therefore, we need to make sure that the row position is valid first.
|
// Therefore, we need to make sure that the row position is valid first.
|
||||||
int top = System.Console.CursorTop;
|
int top = System.Console.CursorTop;
|
||||||
|
|
||||||
if (top < 0)
|
if (top < 0)
|
||||||
|
@ -183,7 +183,7 @@ namespace OpenSim.Framework.Console
|
||||||
System.Console.Write("{0}", prompt);
|
System.Console.Write("{0}", prompt);
|
||||||
|
|
||||||
SetCursorTop(new_y);
|
SetCursorTop(new_y);
|
||||||
SetCursorLeft(new_x);
|
SetCursorLeft(new_x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -302,9 +302,9 @@ namespace OpenSim.Framework.Console
|
||||||
if (!UUID.TryParse(post["ID"].ToString(), out id))
|
if (!UUID.TryParse(post["ID"].ToString(), out id))
|
||||||
return reply;
|
return reply;
|
||||||
|
|
||||||
lock(m_Connections)
|
lock (m_Connections)
|
||||||
{
|
{
|
||||||
if(!m_Connections.ContainsKey(id))
|
if (!m_Connections.ContainsKey(id))
|
||||||
return reply;
|
return reply;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -152,6 +152,8 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public delegate void AgentSit(IClientAPI remoteClient, UUID agentID);
|
public delegate void AgentSit(IClientAPI remoteClient, UUID agentID);
|
||||||
|
|
||||||
|
public delegate void LandUndo(IClientAPI remoteClient);
|
||||||
|
|
||||||
public delegate void AvatarPickerRequest(IClientAPI remoteClient, UUID agentdata, UUID queryID, string UserQuery);
|
public delegate void AvatarPickerRequest(IClientAPI remoteClient, UUID agentdata, UUID queryID, string UserQuery);
|
||||||
|
|
||||||
public delegate void GrabObject(
|
public delegate void GrabObject(
|
||||||
|
@ -419,9 +421,9 @@ namespace OpenSim.Framework
|
||||||
public delegate void AcceptCallingCard(IClientAPI remoteClient, UUID transactionID, UUID folderID);
|
public delegate void AcceptCallingCard(IClientAPI remoteClient, UUID transactionID, UUID folderID);
|
||||||
|
|
||||||
public delegate void DeclineCallingCard(IClientAPI remoteClient, UUID transactionID);
|
public delegate void DeclineCallingCard(IClientAPI remoteClient, UUID transactionID);
|
||||||
|
|
||||||
public delegate void SoundTrigger(
|
public delegate void SoundTrigger(
|
||||||
UUID soundId, UUID ownerid, UUID objid, UUID parentid, double Gain, Vector3 Position, UInt64 Handle);
|
UUID soundId, UUID ownerid, UUID objid, UUID parentid, double Gain, Vector3 Position, UInt64 Handle, float radius);
|
||||||
|
|
||||||
public delegate void StartLure(byte lureType, string message, UUID targetID, IClientAPI client);
|
public delegate void StartLure(byte lureType, string message, UUID targetID, IClientAPI client);
|
||||||
public delegate void TeleportLureRequest(UUID lureID, uint teleportFlags, IClientAPI client);
|
public delegate void TeleportLureRequest(UUID lureID, uint teleportFlags, IClientAPI client);
|
||||||
|
@ -988,6 +990,8 @@ namespace OpenSim.Framework
|
||||||
event ScriptAnswer OnScriptAnswer;
|
event ScriptAnswer OnScriptAnswer;
|
||||||
|
|
||||||
event AgentSit OnUndo;
|
event AgentSit OnUndo;
|
||||||
|
event AgentSit OnRedo;
|
||||||
|
event LandUndo OnLandUndo;
|
||||||
|
|
||||||
event ForceReleaseControls OnForceReleaseControls;
|
event ForceReleaseControls OnForceReleaseControls;
|
||||||
event GodLandStatRequest OnLandStatRequest;
|
event GodLandStatRequest OnLandStatRequest;
|
||||||
|
|
|
@ -358,6 +358,32 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int[] _mediaSize = new int[2];
|
||||||
|
public int[] MediaSize
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _mediaSize;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_mediaSize = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string _mediaType = "";
|
||||||
|
public string MediaType
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _mediaType;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_mediaType = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// URL to the shoutcast music stream to play on the parcel
|
/// URL to the shoutcast music stream to play on the parcel
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -186,6 +186,40 @@ namespace OpenSim.Framework
|
||||||
PCode = (byte)PCodeEnum.Primitive;
|
PCode = (byte)PCodeEnum.Primitive;
|
||||||
ExtraParams = new byte[1];
|
ExtraParams = new byte[1];
|
||||||
m_textureEntry = DEFAULT_TEXTURE;
|
m_textureEntry = DEFAULT_TEXTURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PrimitiveBaseShape(Primitive prim)
|
||||||
|
{
|
||||||
|
PCode = (byte)prim.PrimData.PCode;
|
||||||
|
ExtraParams = new byte[1];
|
||||||
|
|
||||||
|
State = prim.PrimData.State;
|
||||||
|
PathBegin = Primitive.PackBeginCut(prim.PrimData.PathBegin);
|
||||||
|
PathEnd = Primitive.PackEndCut(prim.PrimData.PathEnd);
|
||||||
|
PathScaleX = Primitive.PackPathScale(prim.PrimData.PathScaleX);
|
||||||
|
PathScaleY = Primitive.PackPathScale(prim.PrimData.PathScaleY);
|
||||||
|
PathShearX = (byte)Primitive.PackPathShear(prim.PrimData.PathShearX);
|
||||||
|
PathShearY = (byte)Primitive.PackPathShear(prim.PrimData.PathShearY);
|
||||||
|
PathSkew = Primitive.PackPathTwist(prim.PrimData.PathSkew);
|
||||||
|
ProfileBegin = Primitive.PackBeginCut(prim.PrimData.ProfileBegin);
|
||||||
|
ProfileEnd = Primitive.PackEndCut(prim.PrimData.ProfileEnd);
|
||||||
|
Scale = prim.Scale;
|
||||||
|
PathCurve = (byte)prim.PrimData.PathCurve;
|
||||||
|
ProfileCurve = (byte)prim.PrimData.ProfileCurve;
|
||||||
|
ProfileHollow = Primitive.PackProfileHollow(prim.PrimData.ProfileHollow);
|
||||||
|
PathRadiusOffset = Primitive.PackPathTwist(prim.PrimData.PathRadiusOffset);
|
||||||
|
PathRevolutions = Primitive.PackPathRevolutions(prim.PrimData.PathRevolutions);
|
||||||
|
PathTaperX = Primitive.PackPathTaper(prim.PrimData.PathTaperX);
|
||||||
|
PathTaperY = Primitive.PackPathTaper(prim.PrimData.PathTaperY);
|
||||||
|
PathTwist = Primitive.PackPathTwist(prim.PrimData.PathTwist);
|
||||||
|
PathTwistBegin = Primitive.PackPathTwist(prim.PrimData.PathTwistBegin);
|
||||||
|
|
||||||
|
m_textureEntry = prim.Textures.GetBytes();
|
||||||
|
|
||||||
|
SculptEntry = (prim.Sculpt.Type != OpenMetaverse.SculptType.None);
|
||||||
|
SculptData = prim.Sculpt.GetBytes();
|
||||||
|
SculptTexture = prim.Sculpt.SculptTexture;
|
||||||
|
SculptType = (byte)prim.Sculpt.Type;
|
||||||
}
|
}
|
||||||
|
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
|
|
|
@ -790,7 +790,6 @@ namespace OpenSim.Framework
|
||||||
else
|
else
|
||||||
m_externalHostName = externalName;
|
m_externalHostName = externalName;
|
||||||
|
|
||||||
|
|
||||||
// Master avatar cruft
|
// Master avatar cruft
|
||||||
//
|
//
|
||||||
string masterAvatarUUID;
|
string masterAvatarUUID;
|
||||||
|
|
|
@ -589,11 +589,17 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public static IPAddress GetLocalHost()
|
public static IPAddress GetLocalHost()
|
||||||
{
|
{
|
||||||
string dnsAddress = "localhost";
|
IPAddress[] iplist = GetLocalHosts();
|
||||||
|
|
||||||
IPAddress[] hosts = Dns.GetHostEntry(dnsAddress).AddressList;
|
if (iplist.Length == 0) // No accessible external interfaces
|
||||||
|
{
|
||||||
|
IPAddress[] loopback = Dns.GetHostAddresses("localhost");
|
||||||
|
IPAddress localhost = loopback[0];
|
||||||
|
|
||||||
foreach (IPAddress host in hosts)
|
return localhost;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (IPAddress host in iplist)
|
||||||
{
|
{
|
||||||
if (!IPAddress.IsLoopback(host) && host.AddressFamily == AddressFamily.InterNetwork)
|
if (!IPAddress.IsLoopback(host) && host.AddressFamily == AddressFamily.InterNetwork)
|
||||||
{
|
{
|
||||||
|
@ -601,15 +607,15 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hosts.Length > 0)
|
if (iplist.Length > 0)
|
||||||
{
|
{
|
||||||
foreach (IPAddress host in hosts)
|
foreach (IPAddress host in iplist)
|
||||||
{
|
{
|
||||||
if (host.AddressFamily == AddressFamily.InterNetwork)
|
if (host.AddressFamily == AddressFamily.InterNetwork)
|
||||||
return host;
|
return host;
|
||||||
}
|
}
|
||||||
// Well all else failed...
|
// Well all else failed...
|
||||||
return hosts[0];
|
return iplist[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -190,6 +190,8 @@ namespace OpenSim
|
||||||
|
|
||||||
PrintFileToConsole("startuplogo.txt");
|
PrintFileToConsole("startuplogo.txt");
|
||||||
|
|
||||||
|
m_log.InfoFormat("[NETWORK]: Using {0} as SYSTEMIP", Util.GetLocalHost().ToString());
|
||||||
|
|
||||||
// For now, start at the 'root' level by default
|
// For now, start at the 'root' level by default
|
||||||
if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it
|
if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it
|
||||||
ChangeSelectedRegion("region",
|
ChangeSelectedRegion("region",
|
||||||
|
@ -367,7 +369,6 @@ namespace OpenSim
|
||||||
m_console.Commands.AddCommand("hypergrid", false, "unlink-region",
|
m_console.Commands.AddCommand("hypergrid", false, "unlink-region",
|
||||||
"unlink-region <local name> or <HostName>:<HttpPort> <cr>",
|
"unlink-region <local name> or <HostName>:<HttpPort> <cr>",
|
||||||
"Unlink a hypergrid region", RunCommand);
|
"Unlink a hypergrid region", RunCommand);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void ShutdownSpecific()
|
public override void ShutdownSpecific()
|
||||||
|
@ -433,7 +434,7 @@ namespace OpenSim
|
||||||
// kick client...
|
// kick client...
|
||||||
if (alert != null)
|
if (alert != null)
|
||||||
presence.ControllingClient.Kick(alert);
|
presence.ControllingClient.Kick(alert);
|
||||||
else
|
else
|
||||||
presence.ControllingClient.Kick("\nThe OpenSim manager kicked you out.\n");
|
presence.ControllingClient.Kick("\nThe OpenSim manager kicked you out.\n");
|
||||||
|
|
||||||
// ...and close on our side
|
// ...and close on our side
|
||||||
|
@ -640,7 +641,6 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Load, Unload, and list Region modules in use
|
/// Load, Unload, and list Region modules in use
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -972,7 +972,6 @@ namespace OpenSim
|
||||||
scene.RegionInfo.RegionLocX,
|
scene.RegionInfo.RegionLocX,
|
||||||
scene.RegionInfo.RegionLocY,
|
scene.RegionInfo.RegionLocY,
|
||||||
scene.RegionInfo.InternalEndPoint.Port));
|
scene.RegionInfo.InternalEndPoint.Port));
|
||||||
|
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1097,7 +1096,7 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MainConsole.Instance.Output(string.Format("A user with the name {0} {1} already exists!", firstName, lastName));
|
MainConsole.Instance.Output(string.Format("A user with the name {0} {1} already exists!", firstName, lastName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -330,7 +330,7 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
//m_log.DebugFormat("[XXX] name = {0} (this module's name: {1}", name, Name);
|
//m_log.DebugFormat("[XXX] name = {0} (this module's name: {1}", name, Name);
|
||||||
|
|
||||||
if (name != Name)
|
if (name != Name)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
long maxSize = DefaultMaxSize;
|
long maxSize = DefaultMaxSize;
|
||||||
int maxCount = DefaultMaxCount;
|
int maxCount = DefaultMaxCount;
|
||||||
|
|
|
@ -69,7 +69,7 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
|
|
||||||
private readonly List<char> m_InvalidChars = new List<char>();
|
private readonly List<char> m_InvalidChars = new List<char>();
|
||||||
|
|
||||||
private int m_LogLevel = 1;
|
private int m_LogLevel = 0;
|
||||||
private ulong m_HitRateDisplay = 1; // How often to display hit statistics, given in requests
|
private ulong m_HitRateDisplay = 1; // How often to display hit statistics, given in requests
|
||||||
|
|
||||||
private static ulong m_Requests;
|
private static ulong m_Requests;
|
||||||
|
@ -156,7 +156,7 @@ namespace Flotsam.RegionModules.AssetCache
|
||||||
m_WaitOnInprogressTimeout = assetConfig.GetInt("WaitOnInprogressTimeout", 3000);
|
m_WaitOnInprogressTimeout = assetConfig.GetInt("WaitOnInprogressTimeout", 3000);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_LogLevel = assetConfig.GetInt("LogLevel", 1);
|
m_LogLevel = assetConfig.GetInt("LogLevel", 0);
|
||||||
m_HitRateDisplay = (ulong)assetConfig.GetInt("HitRateDisplay", 1000);
|
m_HitRateDisplay = (ulong)assetConfig.GetInt("HitRateDisplay", 1000);
|
||||||
|
|
||||||
m_FileExpiration = TimeSpan.FromHours(assetConfig.GetDouble("FileCacheTimeout", m_DefaultFileExpiration));
|
m_FileExpiration = TimeSpan.FromHours(assetConfig.GetDouble("FileCacheTimeout", m_DefaultFileExpiration));
|
||||||
|
|
|
@ -148,13 +148,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
|
||||||
private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID)
|
private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID)
|
||||||
{
|
{
|
||||||
ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
||||||
if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0)
|
try
|
||||||
{
|
{
|
||||||
avatar.Invulnerable = false;
|
if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0)
|
||||||
|
{
|
||||||
|
avatar.Invulnerable = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
avatar.Invulnerable = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
catch (Exception)
|
||||||
{
|
{
|
||||||
avatar.Invulnerable = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,7 +131,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
{
|
{
|
||||||
if (CheckPresence(userInfo.UserProfile.ID))
|
if (CheckPresence(userInfo.UserProfile.ID))
|
||||||
{
|
{
|
||||||
new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, saveStream).Execute();
|
try
|
||||||
|
{
|
||||||
|
new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, saveStream).Execute();
|
||||||
|
}
|
||||||
|
catch (EntryPointNotFoundException e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream."
|
||||||
|
+ "If you've manually installed Mono, have you appropriately updated zlib1g as well?");
|
||||||
|
m_log.Error(e);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -156,7 +169,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
{
|
{
|
||||||
if (CheckPresence(userInfo.UserProfile.ID))
|
if (CheckPresence(userInfo.UserProfile.ID))
|
||||||
{
|
{
|
||||||
new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, savePath).Execute();
|
try
|
||||||
|
{
|
||||||
|
new InventoryArchiveWriteRequest(id, this, m_aScene, userInfo, invPath, savePath).Execute();
|
||||||
|
}
|
||||||
|
catch (EntryPointNotFoundException e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream."
|
||||||
|
+ "If you've manually installed Mono, have you appropriately updated zlib1g as well?");
|
||||||
|
m_log.Error(e);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -181,8 +207,22 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
{
|
{
|
||||||
if (CheckPresence(userInfo.UserProfile.ID))
|
if (CheckPresence(userInfo.UserProfile.ID))
|
||||||
{
|
{
|
||||||
InventoryArchiveReadRequest request =
|
InventoryArchiveReadRequest request;
|
||||||
new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream);
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
request = new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream);
|
||||||
|
}
|
||||||
|
catch (EntryPointNotFoundException e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream."
|
||||||
|
+ "If you've manually installed Mono, have you appropriately updated zlib1g as well?");
|
||||||
|
m_log.Error(e);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
UpdateClientWithLoadedNodes(userInfo, request.Execute());
|
UpdateClientWithLoadedNodes(userInfo, request.Execute());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -209,8 +249,22 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
{
|
{
|
||||||
if (CheckPresence(userInfo.UserProfile.ID))
|
if (CheckPresence(userInfo.UserProfile.ID))
|
||||||
{
|
{
|
||||||
InventoryArchiveReadRequest request =
|
InventoryArchiveReadRequest request;
|
||||||
new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath);
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
request = new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath);
|
||||||
|
}
|
||||||
|
catch (EntryPointNotFoundException e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream."
|
||||||
|
+ "If you've manually installed Mono, have you appropriately updated zlib1g as well?");
|
||||||
|
m_log.Error(e);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
UpdateClientWithLoadedNodes(userInfo, request.Execute());
|
UpdateClientWithLoadedNodes(userInfo, request.Execute());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -224,7 +224,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
|
||||||
m_Cache.Cache(a);
|
m_Cache.Cache(a);
|
||||||
|
|
||||||
// if (null == a)
|
// if (null == a)
|
||||||
// m_log.WarnFormat("[LOCAL ASSET SERVICES CONNECTOR]: Could not asynchronously find asset with id {0}", id);
|
// m_log.WarnFormat("[LOCAL ASSET SERVICES CONNECTOR]: Could not asynchronously find asset with id {0}", id);
|
||||||
|
|
||||||
Util.FireAndForget(delegate { handler(assetID, s, a); });
|
Util.FireAndForget(delegate { handler(assetID, s, a); });
|
||||||
});
|
});
|
||||||
|
|
|
@ -317,7 +317,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
|
||||||
item = m_InventoryService.GetItem(item);
|
item = m_InventoryService.GetItem(item);
|
||||||
|
|
||||||
if (null == item)
|
if (null == item)
|
||||||
m_log.ErrorFormat("[LOCAL INVENTORY SERVICES CONNECTOR]: Could not find item with id {0}");
|
m_log.ErrorFormat("[LOCAL INVENTORY SERVICES CONNECTOR]: Could not find item with id {0}", item.ID);
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,7 +109,7 @@ namespace OpenSim.Region.CoreModules.World
|
||||||
{
|
{
|
||||||
foreach (Scene s in m_SceneList)
|
foreach (Scene s in m_SceneList)
|
||||||
{
|
{
|
||||||
if(!ProcessCommand(s, cmd))
|
if (!ProcessCommand(s, cmd))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,19 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
public ArchiveReadRequest(Scene scene, string loadPath, bool merge, Guid requestId)
|
public ArchiveReadRequest(Scene scene, string loadPath, bool merge, Guid requestId)
|
||||||
{
|
{
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
m_loadStream = new GZipStream(GetStream(loadPath), CompressionMode.Decompress);
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_loadStream = new GZipStream(GetStream(loadPath), CompressionMode.Decompress);
|
||||||
|
}
|
||||||
|
catch (EntryPointNotFoundException e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream."
|
||||||
|
+ "If you've manually installed Mono, have you appropriately updated zlib1g as well?");
|
||||||
|
m_log.Error(e);
|
||||||
|
}
|
||||||
|
|
||||||
m_errorMessage = String.Empty;
|
m_errorMessage = String.Empty;
|
||||||
m_merge = merge;
|
m_merge = merge;
|
||||||
m_requestId = requestId;
|
m_requestId = requestId;
|
||||||
|
@ -422,6 +434,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
currentRegionSettings.TerrainTexture4 = loadedRegionSettings.TerrainTexture4;
|
currentRegionSettings.TerrainTexture4 = loadedRegionSettings.TerrainTexture4;
|
||||||
currentRegionSettings.UseEstateSun = loadedRegionSettings.UseEstateSun;
|
currentRegionSettings.UseEstateSun = loadedRegionSettings.UseEstateSun;
|
||||||
currentRegionSettings.WaterHeight = loadedRegionSettings.WaterHeight;
|
currentRegionSettings.WaterHeight = loadedRegionSettings.WaterHeight;
|
||||||
|
|
||||||
|
currentRegionSettings.Save();
|
||||||
|
|
||||||
IEstateModule estateModule = m_scene.RequestModuleInterface<IEstateModule>();
|
IEstateModule estateModule = m_scene.RequestModuleInterface<IEstateModule>();
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,19 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
public ArchiveWriteRequestPreparation(Scene scene, string savePath, Guid requestId)
|
public ArchiveWriteRequestPreparation(Scene scene, string savePath, Guid requestId)
|
||||||
{
|
{
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
m_saveStream = new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress);
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_saveStream = new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress);
|
||||||
|
}
|
||||||
|
catch (EntryPointNotFoundException e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[ARCHIVER]: Mismatch between Mono and zlib1g library version when trying to create compression stream."
|
||||||
|
+ "If you've manually installed Mono, have you appropriately updated zlib1g as well?");
|
||||||
|
m_log.Error(e);
|
||||||
|
}
|
||||||
|
|
||||||
m_requestId = requestId;
|
m_requestId = requestId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
Quaternion rotationOffset = new Quaternion(20, 30, 40, 50);
|
Quaternion rotationOffset = new Quaternion(20, 30, 40, 50);
|
||||||
Vector3 offsetPosition = new Vector3(5, 10, 15);
|
Vector3 offsetPosition = new Vector3(5, 10, 15);
|
||||||
|
|
||||||
return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, offsetPosition) { Name = partName };
|
return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, offsetPosition) { Name = partName };
|
||||||
}
|
}
|
||||||
|
|
||||||
protected SceneObjectPart CreateSceneObjectPart2()
|
protected SceneObjectPart CreateSceneObjectPart2()
|
||||||
|
@ -112,7 +112,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
Vector3 offsetPosition = new Vector3(20, 25, 30);
|
Vector3 offsetPosition = new Vector3(20, 25, 30);
|
||||||
|
|
||||||
return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, offsetPosition) { Name = partName };
|
return new SceneObjectPart(ownerId, shape, groupPosition, rotationOffset, offsetPosition) { Name = partName };
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Test saving a V0.2 OpenSim Region Archive.
|
/// Test saving a V0.2 OpenSim Region Archive.
|
||||||
|
@ -231,7 +231,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
foreach (string name in names)
|
foreach (string name in names)
|
||||||
{
|
{
|
||||||
if (name.EndsWith(".Resources.test-sound.wav"))
|
if (name.EndsWith(".Resources.test-sound.wav"))
|
||||||
soundDataResourceName = name;
|
soundDataResourceName = name;
|
||||||
}
|
}
|
||||||
Assert.That(soundDataResourceName, Is.Not.Null);
|
Assert.That(soundDataResourceName, Is.Not.Null);
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
= new TaskInventoryItem { AssetID = soundUuid, ItemID = soundItemUuid, Name = soundItemName };
|
= new TaskInventoryItem { AssetID = soundUuid, ItemID = soundItemUuid, Name = soundItemName };
|
||||||
part1.Inventory.AddInventoryItem(item1, true);
|
part1.Inventory.AddInventoryItem(item1, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_scene.AddNewSceneObject(object1, false);
|
m_scene.AddNewSceneObject(object1, false);
|
||||||
|
|
||||||
|
@ -306,15 +306,15 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
/// Test loading the region settings of a V0.2 OpenSim Region Archive.
|
/// Test loading the region settings of a V0.2 OpenSim Region Archive.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
[Test]
|
||||||
public void TestLoadOarV0_2RegionSettings()
|
public void TestLoadOarV0_2RegionSettings()
|
||||||
{
|
{
|
||||||
TestHelper.InMethod();
|
TestHelper.InMethod();
|
||||||
//log4net.Config.XmlConfigurator.Configure();
|
//log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
MemoryStream archiveWriteStream = new MemoryStream();
|
MemoryStream archiveWriteStream = new MemoryStream();
|
||||||
TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream);
|
TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream);
|
||||||
|
|
||||||
tar.WriteDir(ArchiveConstants.TERRAINS_PATH);
|
tar.WriteDir(ArchiveConstants.TERRAINS_PATH);
|
||||||
tar.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, ArchiveWriteRequestExecution.Create0p2ControlFile());
|
tar.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, ArchiveWriteRequestExecution.Create0p2ControlFile());
|
||||||
|
|
||||||
RegionSettings rs = new RegionSettings();
|
RegionSettings rs = new RegionSettings();
|
||||||
|
@ -329,11 +329,11 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
rs.DisablePhysics = true;
|
rs.DisablePhysics = true;
|
||||||
rs.DisableScripts = true;
|
rs.DisableScripts = true;
|
||||||
rs.Elevation1NW = 15.9;
|
rs.Elevation1NW = 15.9;
|
||||||
rs.Elevation1NE = 45.3;
|
rs.Elevation1NE = 45.3;
|
||||||
rs.Elevation1SE = 49;
|
rs.Elevation1SE = 49;
|
||||||
rs.Elevation1SW = 1.9;
|
rs.Elevation1SW = 1.9;
|
||||||
rs.Elevation2NW = 4.5;
|
rs.Elevation2NW = 4.5;
|
||||||
rs.Elevation2NE = 19.2;
|
rs.Elevation2NE = 19.2;
|
||||||
rs.Elevation2SE = 9.2;
|
rs.Elevation2SE = 9.2;
|
||||||
rs.Elevation2SW = 2.1;
|
rs.Elevation2SW = 2.1;
|
||||||
rs.FixedSun = true;
|
rs.FixedSun = true;
|
||||||
|
@ -411,7 +411,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
// Quaternion part2RotationOffset = new Quaternion(60, 70, 80, 90);
|
// Quaternion part2RotationOffset = new Quaternion(60, 70, 80, 90);
|
||||||
// Vector3 part2OffsetPosition = new Vector3(20, 25, 30);
|
// Vector3 part2OffsetPosition = new Vector3(20, 25, 30);
|
||||||
|
|
||||||
SceneObjectPart part2 = CreateSceneObjectPart2();
|
SceneObjectPart part2 = CreateSceneObjectPart2();
|
||||||
|
|
||||||
// Create an oar file that we can use for the merge
|
// Create an oar file that we can use for the merge
|
||||||
{
|
{
|
||||||
|
@ -420,9 +420,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
TerrainModule terrainModule = new TerrainModule();
|
TerrainModule terrainModule = new TerrainModule();
|
||||||
|
|
||||||
Scene scene = SceneSetupHelpers.SetupScene();
|
Scene scene = SceneSetupHelpers.SetupScene();
|
||||||
SceneSetupHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule);
|
SceneSetupHelpers.SetupSceneModules(scene, archiverModule, serialiserModule, terrainModule);
|
||||||
|
|
||||||
m_scene.AddNewSceneObject(new SceneObjectGroup(part2), false);
|
m_scene.AddNewSceneObject(new SceneObjectGroup(part2), false);
|
||||||
|
|
||||||
// Write out this scene
|
// Write out this scene
|
||||||
scene.EventManager.OnOarFileSaved += SaveCompleted;
|
scene.EventManager.OnOarFileSaved += SaveCompleted;
|
||||||
|
|
|
@ -60,7 +60,7 @@ namespace OpenSim.Region.CoreModules.World.Sound
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void PlayAttachedSound(
|
public virtual void PlayAttachedSound(
|
||||||
UUID soundID, UUID ownerID, UUID objectID, double gain, Vector3 position, byte flags)
|
UUID soundID, UUID ownerID, UUID objectID, double gain, Vector3 position, byte flags, float radius)
|
||||||
{
|
{
|
||||||
foreach (ScenePresence p in m_scene.GetAvatars())
|
foreach (ScenePresence p in m_scene.GetAvatars())
|
||||||
{
|
{
|
||||||
|
@ -69,14 +69,17 @@ namespace OpenSim.Region.CoreModules.World.Sound
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Scale by distance
|
// Scale by distance
|
||||||
gain = (float)((double)gain*((100.0 - dis) / 100.0));
|
if (radius == 0)
|
||||||
|
gain = (float)((double)gain * ((100.0 - dis) / 100.0));
|
||||||
|
else
|
||||||
|
gain = (float)((double)gain * ((radius - dis) / radius));
|
||||||
|
|
||||||
p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float)gain, flags);
|
p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float)gain, flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void TriggerSound(
|
public virtual void TriggerSound(
|
||||||
UUID soundId, UUID ownerID, UUID objectID, UUID parentID, double gain, Vector3 position, UInt64 handle)
|
UUID soundId, UUID ownerID, UUID objectID, UUID parentID, double gain, Vector3 position, UInt64 handle, float radius)
|
||||||
{
|
{
|
||||||
foreach (ScenePresence p in m_scene.GetAvatars())
|
foreach (ScenePresence p in m_scene.GetAvatars())
|
||||||
{
|
{
|
||||||
|
@ -85,7 +88,10 @@ namespace OpenSim.Region.CoreModules.World.Sound
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Scale by distance
|
// Scale by distance
|
||||||
gain = (float)((double)gain*((100.0 - dis) / 100.0));
|
if (radius == 0)
|
||||||
|
gain = (float)((double)gain * ((100.0 - dis) / 100.0));
|
||||||
|
else
|
||||||
|
gain = (float)((double)gain * ((radius - dis) / radius));
|
||||||
|
|
||||||
p.ControllingClient.SendTriggeredSound(
|
p.ControllingClient.SendTriggeredSound(
|
||||||
soundId, ownerID, objectID, parentID, handle, position, (float)gain);
|
soundId, ownerID, objectID, parentID, handle, position, (float)gain);
|
||||||
|
|
|
@ -84,6 +84,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
private ITerrainChannel m_revert;
|
private ITerrainChannel m_revert;
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private volatile bool m_tainted;
|
private volatile bool m_tainted;
|
||||||
|
private readonly UndoStack<LandUndoState> m_undo = new UndoStack<LandUndoState>(5);
|
||||||
|
|
||||||
#region ICommandableModule Members
|
#region ICommandableModule Members
|
||||||
|
|
||||||
|
@ -174,6 +175,11 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
|
|
||||||
#region ITerrainModule Members
|
#region ITerrainModule Members
|
||||||
|
|
||||||
|
public void UndoTerrain(ITerrainChannel channel)
|
||||||
|
{
|
||||||
|
m_channel = channel;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads a terrain file from disk and installs it in the scene.
|
/// Loads a terrain file from disk and installs it in the scene.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -574,6 +580,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
{
|
{
|
||||||
client.OnModifyTerrain += client_OnModifyTerrain;
|
client.OnModifyTerrain += client_OnModifyTerrain;
|
||||||
client.OnBakeTerrain += client_OnBakeTerrain;
|
client.OnBakeTerrain += client_OnBakeTerrain;
|
||||||
|
client.OnLandUndo += client_OnLandUndo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -664,6 +671,19 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
return changesLimited;
|
return changesLimited;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void client_OnLandUndo(IClientAPI client)
|
||||||
|
{
|
||||||
|
lock (m_undo)
|
||||||
|
{
|
||||||
|
if (m_undo.Count > 0)
|
||||||
|
{
|
||||||
|
LandUndoState goback = m_undo.Pop();
|
||||||
|
if (goback != null)
|
||||||
|
goback.PlaybackState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends a copy of the current terrain to the scenes clients
|
/// Sends a copy of the current terrain to the scenes clients
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -718,6 +738,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
}
|
}
|
||||||
if (allowed)
|
if (allowed)
|
||||||
{
|
{
|
||||||
|
StoreUndoState();
|
||||||
m_painteffects[(StandardTerrainEffects) action].PaintEffect(
|
m_painteffects[(StandardTerrainEffects) action].PaintEffect(
|
||||||
m_channel, allowMask, west, south, height, size, seconds);
|
m_channel, allowMask, west, south, height, size, seconds);
|
||||||
|
|
||||||
|
@ -758,6 +779,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
|
|
||||||
if (allowed)
|
if (allowed)
|
||||||
{
|
{
|
||||||
|
StoreUndoState();
|
||||||
m_floodeffects[(StandardTerrainEffects) action].FloodEffect(
|
m_floodeffects[(StandardTerrainEffects) action].FloodEffect(
|
||||||
m_channel, fillArea, size);
|
m_channel, fillArea, size);
|
||||||
|
|
||||||
|
@ -782,6 +804,25 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void StoreUndoState()
|
||||||
|
{
|
||||||
|
lock (m_undo)
|
||||||
|
{
|
||||||
|
if (m_undo.Count > 0)
|
||||||
|
{
|
||||||
|
LandUndoState last = m_undo.Peek();
|
||||||
|
if (last != null)
|
||||||
|
{
|
||||||
|
if (last.Compare(m_channel))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LandUndoState nUndo = new LandUndoState(this, m_channel);
|
||||||
|
m_undo.Push(nUndo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#region Console Commands
|
#region Console Commands
|
||||||
|
|
||||||
private void InterfaceLoadFile(Object[] args)
|
private void InterfaceLoadFile(Object[] args)
|
||||||
|
|
|
@ -194,6 +194,8 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
public event ObjectBuy OnObjectBuy;
|
public event ObjectBuy OnObjectBuy;
|
||||||
public event BuyObjectInventory OnBuyObjectInventory;
|
public event BuyObjectInventory OnBuyObjectInventory;
|
||||||
public event AgentSit OnUndo;
|
public event AgentSit OnUndo;
|
||||||
|
public event AgentSit OnRedo;
|
||||||
|
public event LandUndo OnLandUndo;
|
||||||
|
|
||||||
public event ForceReleaseControls OnForceReleaseControls;
|
public event ForceReleaseControls OnForceReleaseControls;
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// The UUID of the texture updater, not the texture UUID. If you need the texture UUID then you will need
|
/// The UUID of the texture updater, not the texture UUID. If you need the texture UUID then you will need
|
||||||
/// to obtain it directly from the SceneObjectPart. For instance, if ALL_SIDES is set then this texture
|
/// to obtain it directly from the SceneObjectPart. For instance, if ALL_SIDES is set then this texture
|
||||||
/// can be obtained as SceneObjectPart.Shape.Textures.DefaultTexture.TextureID
|
/// can be obtained as SceneObjectPart.Shape.Textures.DefaultTexture.TextureID
|
||||||
/// </returns>
|
/// </returns>
|
||||||
UUID AddDynamicTextureData(UUID simID, UUID primID, string contentType, string data, string extraParams,
|
UUID AddDynamicTextureData(UUID simID, UUID primID, string contentType, string data, string extraParams,
|
||||||
int updateTimer, bool SetBlending, byte AlphaValue);
|
int updateTimer, bool SetBlending, byte AlphaValue);
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// <returns>
|
/// <returns>
|
||||||
/// A list of inventory items with that name.
|
/// A list of inventory items with that name.
|
||||||
/// If no inventory item has that name then an empty list is returned.
|
/// If no inventory item has that name then an empty list is returned.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
IList<TaskInventoryItem> GetInventoryItems(string name);
|
IList<TaskInventoryItem> GetInventoryItems(string name);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -32,9 +32,9 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
{
|
{
|
||||||
public interface ISoundModule
|
public interface ISoundModule
|
||||||
{
|
{
|
||||||
void PlayAttachedSound(UUID soundID, UUID ownerID, UUID objectID, double gain, Vector3 position, byte flags);
|
void PlayAttachedSound(UUID soundID, UUID ownerID, UUID objectID, double gain, Vector3 position, byte flags, float radius);
|
||||||
|
|
||||||
void TriggerSound(
|
void TriggerSound(
|
||||||
UUID soundId, UUID ownerID, UUID objectID, UUID parentID, double gain, Vector3 position, UInt64 handle);
|
UUID soundId, UUID ownerID, UUID objectID, UUID parentID, double gain, Vector3 position, UInt64 handle, float radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -62,5 +62,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
void SaveToStream(string filename, Stream stream);
|
void SaveToStream(string filename, Stream stream);
|
||||||
|
|
||||||
void InstallPlugin(string name, ITerrainEffect plug);
|
void InstallPlugin(string name, ITerrainEffect plug);
|
||||||
|
|
||||||
|
void UndoTerrain(ITerrainChannel channel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// <param name="name">name to filter on</param>
|
/// <param name="name">name to filter on</param>
|
||||||
/// <param name="id">key to filter on (user given, could be totally faked)</param>
|
/// <param name="id">key to filter on (user given, could be totally faked)</param>
|
||||||
/// <param name="msg">msg to filter on</param>
|
/// <param name="msg">msg to filter on</param>
|
||||||
/// <returns>number of the scripts handle</returns>
|
/// <returns>number of the scripts handle</returns>
|
||||||
int Listen(uint LocalID, UUID itemID, UUID hostID, int channel, string name, UUID id, string msg);
|
int Listen(uint LocalID, UUID itemID, UUID hostID, int channel, string name, UUID id, string msg);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -77,19 +77,19 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// <param name="channel">channel to sent on</param>
|
/// <param name="channel">channel to sent on</param>
|
||||||
/// <param name="name">name of sender (object or avatar)</param>
|
/// <param name="name">name of sender (object or avatar)</param>
|
||||||
/// <param name="id">key of sender (object or avatar)</param>
|
/// <param name="id">key of sender (object or avatar)</param>
|
||||||
/// <param name="msg">msg to sent</param>
|
/// <param name="msg">msg to sent</param>
|
||||||
void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg);
|
void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Are there any listen events ready to be dispatched?
|
/// Are there any listen events ready to be dispatched?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>boolean indication</returns>
|
/// <returns>boolean indication</returns>
|
||||||
bool HasMessages();
|
bool HasMessages();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Pop the first availlable listen event from the queue
|
/// Pop the first availlable listen event from the queue
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>ListenerInfo with filter filled in</returns>
|
/// <returns>ListenerInfo with filter filled in</returns>
|
||||||
IWorldCommListenerInfo GetNextMessage();
|
IWorldCommListenerInfo GetNextMessage();
|
||||||
|
|
||||||
void ListenControl(UUID itemID, int handle, int active);
|
void ListenControl(UUID itemID, int handle, int active);
|
||||||
|
|
|
@ -419,15 +419,12 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||||
{
|
{
|
||||||
if (m_scenePresence.IsChildAgent)
|
if (m_scenePresence.IsChildAgent)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
UUID[] animIDs;
|
|
||||||
int[] sequenceNums;
|
|
||||||
UUID[] objectIDs;
|
|
||||||
|
|
||||||
m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs);
|
m_scenePresence.Scene.ForEachScenePresence(
|
||||||
|
delegate(ScenePresence SP)
|
||||||
m_scenePresence.ControllingClient.SendAnimations(
|
{
|
||||||
animIDs, sequenceNums, m_scenePresence.ControllingClient.AgentId, objectIDs);
|
SP.Animator.SendAnimPack();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -213,7 +213,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Triggered when an object or attachment enters a scene
|
/// Triggered when an object or attachment enters a scene
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public event OnIncomingSceneObjectDelegate OnIncomingSceneObject;
|
public event OnIncomingSceneObjectDelegate OnIncomingSceneObject;
|
||||||
public delegate void OnIncomingSceneObjectDelegate(SceneObjectGroup so);
|
public delegate void OnIncomingSceneObjectDelegate(SceneObjectGroup so);
|
||||||
|
|
||||||
public delegate void NewInventoryItemUploadComplete(UUID avatarID, UUID assetID, string name, int userlevel);
|
public delegate void NewInventoryItemUploadComplete(UUID avatarID, UUID assetID, string name, int userlevel);
|
||||||
|
|
||||||
|
@ -417,7 +417,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerGetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID)
|
public void TriggerGetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID)
|
||||||
{
|
{
|
||||||
|
@ -437,7 +437,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnScriptChangedEvent(uint localID, uint change)
|
public void TriggerOnScriptChangedEvent(uint localID, uint change)
|
||||||
|
@ -458,7 +458,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnClientMovement(ScenePresence avatar)
|
public void TriggerOnClientMovement(ScenePresence avatar)
|
||||||
|
@ -479,7 +479,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerPermissionError(UUID user, string reason)
|
public void TriggerPermissionError(UUID user, string reason)
|
||||||
|
@ -500,7 +500,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnPluginConsole(string[] args)
|
public void TriggerOnPluginConsole(string[] args)
|
||||||
|
@ -521,7 +521,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnFrame()
|
public void TriggerOnFrame()
|
||||||
|
@ -542,11 +542,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnNewClient(IClientAPI client)
|
public void TriggerOnNewClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
OnNewClientDelegate handlerNewClient = OnNewClient;
|
OnNewClientDelegate handlerNewClient = OnNewClient;
|
||||||
if (handlerNewClient != null)
|
if (handlerNewClient != null)
|
||||||
{
|
{
|
||||||
|
@ -563,10 +563,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (client is IClientCore)
|
if (client is IClientCore)
|
||||||
{
|
{
|
||||||
OnClientConnectCoreDelegate handlerClientConnect = OnClientConnect;
|
OnClientConnectCoreDelegate handlerClientConnect = OnClientConnect;
|
||||||
if (handlerClientConnect != null)
|
if (handlerClientConnect != null)
|
||||||
{
|
{
|
||||||
|
@ -583,7 +583,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -605,11 +605,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnRemovePresence(UUID agentId)
|
public void TriggerOnRemovePresence(UUID agentId)
|
||||||
{
|
{
|
||||||
OnRemovePresenceDelegate handlerRemovePresence = OnRemovePresence;
|
OnRemovePresenceDelegate handlerRemovePresence = OnRemovePresence;
|
||||||
if (handlerRemovePresence != null)
|
if (handlerRemovePresence != null)
|
||||||
{
|
{
|
||||||
|
@ -626,11 +626,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnBackup(IRegionDataStore dstore)
|
public void TriggerOnBackup(IRegionDataStore dstore)
|
||||||
{
|
{
|
||||||
OnBackupDelegate handlerOnAttach = OnBackup;
|
OnBackupDelegate handlerOnAttach = OnBackup;
|
||||||
if (handlerOnAttach != null)
|
if (handlerOnAttach != null)
|
||||||
{
|
{
|
||||||
|
@ -647,7 +647,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerParcelPrimCountUpdate()
|
public void TriggerParcelPrimCountUpdate()
|
||||||
|
@ -668,7 +668,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerMoneyTransfer(Object sender, MoneyTransferArgs args)
|
public void TriggerMoneyTransfer(Object sender, MoneyTransferArgs args)
|
||||||
|
@ -689,7 +689,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerTerrainTick()
|
public void TriggerTerrainTick()
|
||||||
|
@ -710,7 +710,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerParcelPrimCountAdd(SceneObjectGroup obj)
|
public void TriggerParcelPrimCountAdd(SceneObjectGroup obj)
|
||||||
|
@ -731,7 +731,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerObjectBeingRemovedFromScene(SceneObjectGroup obj)
|
public void TriggerObjectBeingRemovedFromScene(SceneObjectGroup obj)
|
||||||
|
@ -752,11 +752,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerShutdown()
|
public void TriggerShutdown()
|
||||||
{
|
{
|
||||||
OnShutdownDelegate handlerShutdown = OnShutdown;
|
OnShutdownDelegate handlerShutdown = OnShutdown;
|
||||||
if (handlerShutdown != null)
|
if (handlerShutdown != null)
|
||||||
{
|
{
|
||||||
|
@ -773,11 +773,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
|
public void TriggerObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
|
||||||
{
|
{
|
||||||
ObjectGrabDelegate handlerObjectGrab = OnObjectGrab;
|
ObjectGrabDelegate handlerObjectGrab = OnObjectGrab;
|
||||||
if (handlerObjectGrab != null)
|
if (handlerObjectGrab != null)
|
||||||
{
|
{
|
||||||
|
@ -794,11 +794,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerObjectGrabbing(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
|
public void TriggerObjectGrabbing(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
|
||||||
{
|
{
|
||||||
ObjectGrabDelegate handlerObjectGrabbing = OnObjectGrabbing;
|
ObjectGrabDelegate handlerObjectGrabbing = OnObjectGrabbing;
|
||||||
if (handlerObjectGrabbing != null)
|
if (handlerObjectGrabbing != null)
|
||||||
{
|
{
|
||||||
|
@ -815,11 +815,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerObjectDeGrab(uint localID, uint originalID, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
|
public void TriggerObjectDeGrab(uint localID, uint originalID, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
|
||||||
{
|
{
|
||||||
ObjectDeGrabDelegate handlerObjectDeGrab = OnObjectDeGrab;
|
ObjectDeGrabDelegate handlerObjectDeGrab = OnObjectDeGrab;
|
||||||
if (handlerObjectDeGrab != null)
|
if (handlerObjectDeGrab != null)
|
||||||
{
|
{
|
||||||
|
@ -836,11 +836,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerScriptReset(uint localID, UUID itemID)
|
public void TriggerScriptReset(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
ScriptResetDelegate handlerScriptReset = OnScriptReset;
|
ScriptResetDelegate handlerScriptReset = OnScriptReset;
|
||||||
if (handlerScriptReset != null)
|
if (handlerScriptReset != null)
|
||||||
{
|
{
|
||||||
|
@ -857,11 +857,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource)
|
public void TriggerRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource)
|
||||||
{
|
{
|
||||||
NewRezScript handlerRezScript = OnRezScript;
|
NewRezScript handlerRezScript = OnRezScript;
|
||||||
if (handlerRezScript != null)
|
if (handlerRezScript != null)
|
||||||
{
|
{
|
||||||
|
@ -878,7 +878,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerStartScript(uint localID, UUID itemID)
|
public void TriggerStartScript(uint localID, UUID itemID)
|
||||||
|
@ -899,7 +899,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerStopScript(uint localID, UUID itemID)
|
public void TriggerStopScript(uint localID, UUID itemID)
|
||||||
|
@ -920,11 +920,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerRemoveScript(uint localID, UUID itemID)
|
public void TriggerRemoveScript(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
RemoveScript handlerRemoveScript = OnRemoveScript;
|
RemoveScript handlerRemoveScript = OnRemoveScript;
|
||||||
if (handlerRemoveScript != null)
|
if (handlerRemoveScript != null)
|
||||||
{
|
{
|
||||||
|
@ -941,7 +941,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TriggerGroupMove(UUID groupID, Vector3 delta)
|
public bool TriggerGroupMove(UUID groupID, Vector3 delta)
|
||||||
|
@ -1040,7 +1040,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerLandObjectAdded(ILandObject newParcel)
|
public void TriggerLandObjectAdded(ILandObject newParcel)
|
||||||
|
@ -1061,7 +1061,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerLandObjectRemoved(UUID globalID)
|
public void TriggerLandObjectRemoved(UUID globalID)
|
||||||
|
@ -1082,7 +1082,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerLandObjectUpdated(uint localParcelID, ILandObject newParcel)
|
public void TriggerLandObjectUpdated(uint localParcelID, ILandObject newParcel)
|
||||||
|
@ -1108,7 +1108,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerIncomingInstantMessage(GridInstantMessage message)
|
public void TriggerIncomingInstantMessage(GridInstantMessage message)
|
||||||
|
@ -1129,7 +1129,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerUnhandledInstantMessage(GridInstantMessage message)
|
public void TriggerUnhandledInstantMessage(GridInstantMessage message)
|
||||||
|
@ -1150,7 +1150,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerClientClosed(UUID ClientID, Scene scene)
|
public void TriggerClientClosed(UUID ClientID, Scene scene)
|
||||||
|
@ -1171,7 +1171,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnMakeChildAgent(ScenePresence presence)
|
public void TriggerOnMakeChildAgent(ScenePresence presence)
|
||||||
|
@ -1192,7 +1192,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnSendNewWindlightProfileTargeted(RegionMeta7WindlightData wl, UUID user)
|
public void TriggerOnSendNewWindlightProfileTargeted(RegionMeta7WindlightData wl, UUID user)
|
||||||
|
@ -1231,7 +1231,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnIncomingSceneObject(SceneObjectGroup so)
|
public void TriggerOnIncomingSceneObject(SceneObjectGroup so)
|
||||||
|
@ -1251,12 +1251,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
"[EVENT MANAGER]: Delegate for TriggerOnIncomingSceneObject failed - continuing. {0} {1}",
|
"[EVENT MANAGER]: Delegate for TriggerOnIncomingSceneObject failed - continuing. {0} {1}",
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnRegisterCaps(UUID agentID, Caps caps)
|
public void TriggerOnRegisterCaps(UUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
RegisterCapsEvent handlerRegisterCaps = OnRegisterCaps;
|
RegisterCapsEvent handlerRegisterCaps = OnRegisterCaps;
|
||||||
if (handlerRegisterCaps != null)
|
if (handlerRegisterCaps != null)
|
||||||
{
|
{
|
||||||
|
@ -1273,7 +1273,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnDeregisterCaps(UUID agentID, Caps caps)
|
public void TriggerOnDeregisterCaps(UUID agentID, Caps caps)
|
||||||
|
@ -1294,7 +1294,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnNewInventoryItemUploadComplete(UUID agentID, UUID AssetID, String AssetName, int userlevel)
|
public void TriggerOnNewInventoryItemUploadComplete(UUID agentID, UUID AssetID, String AssetName, int userlevel)
|
||||||
|
@ -1315,7 +1315,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerLandBuy(Object sender, LandBuyArgs args)
|
public void TriggerLandBuy(Object sender, LandBuyArgs args)
|
||||||
|
@ -1336,7 +1336,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerValidateLandBuy(Object sender, LandBuyArgs args)
|
public void TriggerValidateLandBuy(Object sender, LandBuyArgs args)
|
||||||
|
@ -1357,11 +1357,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 currentpos)
|
public void TriggerAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 currentpos)
|
||||||
{
|
{
|
||||||
ScriptAtTargetEvent handlerScriptAtTargetEvent = OnScriptAtTargetEvent;
|
ScriptAtTargetEvent handlerScriptAtTargetEvent = OnScriptAtTargetEvent;
|
||||||
if (handlerScriptAtTargetEvent != null)
|
if (handlerScriptAtTargetEvent != null)
|
||||||
{
|
{
|
||||||
|
@ -1378,7 +1378,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerNotAtTargetEvent(uint localID)
|
public void TriggerNotAtTargetEvent(uint localID)
|
||||||
|
@ -1399,11 +1399,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerAtRotTargetEvent(uint localID, uint handle, Quaternion targetrot, Quaternion currentrot)
|
public void TriggerAtRotTargetEvent(uint localID, uint handle, Quaternion targetrot, Quaternion currentrot)
|
||||||
{
|
{
|
||||||
ScriptAtRotTargetEvent handlerScriptAtRotTargetEvent = OnScriptAtRotTargetEvent;
|
ScriptAtRotTargetEvent handlerScriptAtRotTargetEvent = OnScriptAtRotTargetEvent;
|
||||||
if (handlerScriptAtRotTargetEvent != null)
|
if (handlerScriptAtRotTargetEvent != null)
|
||||||
{
|
{
|
||||||
|
@ -1420,7 +1420,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerNotAtRotTargetEvent(uint localID)
|
public void TriggerNotAtRotTargetEvent(uint localID)
|
||||||
|
@ -1441,7 +1441,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerRequestChangeWaterHeight(float height)
|
public void TriggerRequestChangeWaterHeight(float height)
|
||||||
|
@ -1462,7 +1462,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerAvatarKill(uint KillerObjectLocalID, ScenePresence DeadAvatar)
|
public void TriggerAvatarKill(uint KillerObjectLocalID, ScenePresence DeadAvatar)
|
||||||
|
@ -1483,7 +1483,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerSignificantClientMovement(IClientAPI client)
|
public void TriggerSignificantClientMovement(IClientAPI client)
|
||||||
|
@ -1504,7 +1504,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnChatFromWorld(Object sender, OSChatMessage chat)
|
public void TriggerOnChatFromWorld(Object sender, OSChatMessage chat)
|
||||||
|
@ -1525,7 +1525,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnChatFromClient(Object sender, OSChatMessage chat)
|
public void TriggerOnChatFromClient(Object sender, OSChatMessage chat)
|
||||||
|
@ -1546,7 +1546,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnChatBroadcast(Object sender, OSChatMessage chat)
|
public void TriggerOnChatBroadcast(Object sender, OSChatMessage chat)
|
||||||
|
@ -1567,7 +1567,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void TriggerControlEvent(uint p, UUID scriptUUID, UUID avatarID, uint held, uint _changed)
|
internal void TriggerControlEvent(uint p, UUID scriptUUID, UUID avatarID, uint held, uint _changed)
|
||||||
|
@ -1588,7 +1588,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerNoticeNoLandDataFromStorage()
|
public void TriggerNoticeNoLandDataFromStorage()
|
||||||
|
@ -1609,7 +1609,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerIncomingLandDataFromStorage(List<LandData> landData)
|
public void TriggerIncomingLandDataFromStorage(List<LandData> landData)
|
||||||
|
@ -1630,7 +1630,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerSetAllowForcefulBan(bool allow)
|
public void TriggerSetAllowForcefulBan(bool allow)
|
||||||
|
@ -1651,7 +1651,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerRequestParcelPrimCountUpdate()
|
public void TriggerRequestParcelPrimCountUpdate()
|
||||||
|
@ -1672,7 +1672,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerParcelPrimCountTainted()
|
public void TriggerParcelPrimCountTainted()
|
||||||
|
@ -1693,7 +1693,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// this lets us keep track of nasty script events like timer, etc.
|
// this lets us keep track of nasty script events like timer, etc.
|
||||||
|
@ -1732,7 +1732,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public float GetCurrentTimeAsSunLindenHour()
|
public float GetCurrentTimeAsSunLindenHour()
|
||||||
|
@ -1759,7 +1759,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOarFileLoaded(Guid requestId, string message)
|
public void TriggerOarFileLoaded(Guid requestId, string message)
|
||||||
{
|
{
|
||||||
OarFileLoaded handlerOarFileLoaded = OnOarFileLoaded;
|
OarFileLoaded handlerOarFileLoaded = OnOarFileLoaded;
|
||||||
if (handlerOarFileLoaded != null)
|
if (handlerOarFileLoaded != null)
|
||||||
{
|
{
|
||||||
|
@ -1776,7 +1776,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOarFileSaved(Guid requestId, string message)
|
public void TriggerOarFileSaved(Guid requestId, string message)
|
||||||
|
@ -1797,7 +1797,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerEmptyScriptCompileQueue(int numScriptsFailed, string message)
|
public void TriggerEmptyScriptCompileQueue(int numScriptsFailed, string message)
|
||||||
|
@ -1818,7 +1818,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerScriptCollidingStart(uint localId, ColliderArgs colliders)
|
public void TriggerScriptCollidingStart(uint localId, ColliderArgs colliders)
|
||||||
|
@ -1839,7 +1839,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerScriptColliding(uint localId, ColliderArgs colliders)
|
public void TriggerScriptColliding(uint localId, ColliderArgs colliders)
|
||||||
|
@ -1860,7 +1860,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerScriptCollidingEnd(uint localId, ColliderArgs colliders)
|
public void TriggerScriptCollidingEnd(uint localId, ColliderArgs colliders)
|
||||||
|
@ -1881,7 +1881,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerScriptLandCollidingStart(uint localId, ColliderArgs colliders)
|
public void TriggerScriptLandCollidingStart(uint localId, ColliderArgs colliders)
|
||||||
|
@ -1902,7 +1902,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerScriptLandColliding(uint localId, ColliderArgs colliders)
|
public void TriggerScriptLandColliding(uint localId, ColliderArgs colliders)
|
||||||
|
@ -1923,7 +1923,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerScriptLandCollidingEnd(uint localId, ColliderArgs colliders)
|
public void TriggerScriptLandCollidingEnd(uint localId, ColliderArgs colliders)
|
||||||
|
@ -1944,11 +1944,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerSetRootAgentScene(UUID agentID, Scene scene)
|
public void TriggerSetRootAgentScene(UUID agentID, Scene scene)
|
||||||
{
|
{
|
||||||
OnSetRootAgentSceneDelegate handlerSetRootAgentScene = OnSetRootAgentScene;
|
OnSetRootAgentSceneDelegate handlerSetRootAgentScene = OnSetRootAgentScene;
|
||||||
if (handlerSetRootAgentScene != null)
|
if (handlerSetRootAgentScene != null)
|
||||||
{
|
{
|
||||||
|
@ -1965,7 +1965,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerOnRegionUp(GridRegion otherRegion)
|
public void TriggerOnRegionUp(GridRegion otherRegion)
|
||||||
|
@ -1986,7 +1986,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
e.Message, e.StackTrace);
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2003,6 +2003,23 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (grp.RootPart.RETURN_AT_EDGE)
|
||||||
|
{
|
||||||
|
// We remove the object here
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<SceneObjectGroup> objects = new List<SceneObjectGroup>();
|
||||||
|
objects.Add(grp);
|
||||||
|
SceneObjectGroup[] objectsArray = objects.ToArray();
|
||||||
|
returnObjects(objectsArray, UUID.Zero);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
m_log.Warn("[DATABASE]: exception when trying to return the prim that crossed the border.");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int thisx = (int)RegionInfo.RegionLocX;
|
int thisx = (int)RegionInfo.RegionLocX;
|
||||||
int thisy = (int)RegionInfo.RegionLocY;
|
int thisy = (int)RegionInfo.RegionLocY;
|
||||||
Vector3 EastCross = new Vector3(0.1f,0,0);
|
Vector3 EastCross = new Vector3(0.1f,0,0);
|
||||||
|
@ -2071,19 +2088,25 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S);
|
Border crossedBordery = GetCrossedBorder(attemptedPosition + SouthCross, Cardinals.S);
|
||||||
//(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize)
|
//(crossedBorderx.BorderLine.Z / (int)Constants.RegionSize)
|
||||||
|
|
||||||
if (crossedBordery.BorderLine.Z > 0)
|
try
|
||||||
{
|
{
|
||||||
pos.Y = ((pos.Y + crossedBordery.BorderLine.Z));
|
if (crossedBordery.BorderLine.Z > 0)
|
||||||
changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize);
|
{
|
||||||
}
|
pos.Y = ((pos.Y + crossedBordery.BorderLine.Z));
|
||||||
else
|
changeY = (int)(crossedBordery.BorderLine.Z / (int)Constants.RegionSize);
|
||||||
pos.Y = ((pos.Y + Constants.RegionSize));
|
}
|
||||||
|
else
|
||||||
|
pos.Y = ((pos.Y + Constants.RegionSize));
|
||||||
|
|
||||||
newRegionHandle
|
newRegionHandle
|
||||||
= Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize),
|
= Util.UIntsToLong((uint)((thisx - changeX) * Constants.RegionSize),
|
||||||
(uint)((thisy + changeY) * Constants.RegionSize));
|
(uint)((thisy + changeY) * Constants.RegionSize));
|
||||||
// x - 1
|
// x - 1
|
||||||
// y + 1
|
// y + 1
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2545,7 +2568,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
AttachObject(
|
AttachObject(
|
||||||
sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false);
|
sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false);
|
||||||
RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
|
RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
|
||||||
grp.SendGroupFullUpdate();
|
grp.SendGroupFullUpdate();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2711,6 +2734,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
client.OnGrabUpdate += ProcessObjectGrabUpdate;
|
client.OnGrabUpdate += ProcessObjectGrabUpdate;
|
||||||
client.OnDeGrabObject += ProcessObjectDeGrab;
|
client.OnDeGrabObject += ProcessObjectDeGrab;
|
||||||
client.OnUndo += m_sceneGraph.HandleUndo;
|
client.OnUndo += m_sceneGraph.HandleUndo;
|
||||||
|
client.OnRedo += m_sceneGraph.HandleRedo;
|
||||||
client.OnObjectDescription += m_sceneGraph.PrimDescription;
|
client.OnObjectDescription += m_sceneGraph.PrimDescription;
|
||||||
client.OnObjectDrop += m_sceneGraph.DropObject;
|
client.OnObjectDrop += m_sceneGraph.DropObject;
|
||||||
client.OnObjectSaleInfo += ObjectSaleInfo;
|
client.OnObjectSaleInfo += ObjectSaleInfo;
|
||||||
|
@ -2865,6 +2889,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
client.OnGrabObject -= ProcessObjectGrab;
|
client.OnGrabObject -= ProcessObjectGrab;
|
||||||
client.OnDeGrabObject -= ProcessObjectDeGrab;
|
client.OnDeGrabObject -= ProcessObjectDeGrab;
|
||||||
client.OnUndo -= m_sceneGraph.HandleUndo;
|
client.OnUndo -= m_sceneGraph.HandleUndo;
|
||||||
|
client.OnRedo -= m_sceneGraph.HandleRedo;
|
||||||
client.OnObjectDescription -= m_sceneGraph.PrimDescription;
|
client.OnObjectDescription -= m_sceneGraph.PrimDescription;
|
||||||
client.OnObjectDrop -= m_sceneGraph.DropObject;
|
client.OnObjectDrop -= m_sceneGraph.DropObject;
|
||||||
client.OnObjectSaleInfo -= ObjectSaleInfo;
|
client.OnObjectSaleInfo -= ObjectSaleInfo;
|
||||||
|
|
|
@ -262,7 +262,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Returns a new unallocated local ID
|
/// Returns a new unallocated local ID
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A brand new local ID</returns>
|
/// <returns>A brand new local ID</returns>
|
||||||
protected internal uint AllocateLocalId()
|
public uint AllocateLocalId()
|
||||||
{
|
{
|
||||||
uint myID;
|
uint myID;
|
||||||
|
|
||||||
|
|
|
@ -476,6 +476,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
part.Undo();
|
part.Undo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
protected internal void HandleRedo(IClientAPI remoteClient, UUID primId)
|
||||||
|
{
|
||||||
|
if (primId != UUID.Zero)
|
||||||
|
{
|
||||||
|
SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId);
|
||||||
|
if (part != null)
|
||||||
|
part.Redo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected internal void HandleObjectGroupUpdate(
|
protected internal void HandleObjectGroupUpdate(
|
||||||
IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage)
|
IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage)
|
||||||
|
@ -669,7 +678,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// it get cleaned up
|
// it get cleaned up
|
||||||
//
|
//
|
||||||
group.RootPart.RemFlag(PrimFlags.TemporaryOnRez);
|
group.RootPart.RemFlag(PrimFlags.TemporaryOnRez);
|
||||||
group.HasGroupChanged = false;
|
group.HasGroupChanged = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -369,14 +369,23 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
lockPartsForRead(true);
|
lockPartsForRead(true);
|
||||||
|
|
||||||
|
if (RootPart.GetStatusSandbox())
|
||||||
{
|
{
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
if (Util.GetDistanceTo(RootPart.StatusSandboxPos, value) > 10)
|
||||||
{
|
{
|
||||||
|
RootPart.ScriptSetPhysicsStatus(false);
|
||||||
part.GroupPosition = val;
|
Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"),
|
||||||
|
ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
|
{
|
||||||
|
part.GroupPosition = val;
|
||||||
|
}
|
||||||
|
|
||||||
lockPartsForRead(false);
|
lockPartsForRead(false);
|
||||||
|
|
||||||
//if (m_rootPart.PhysActor != null)
|
//if (m_rootPart.PhysActor != null)
|
||||||
|
@ -470,6 +479,34 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SceneObjectPart m_PlaySoundMasterPrim = null;
|
||||||
|
public SceneObjectPart PlaySoundMasterPrim
|
||||||
|
{
|
||||||
|
get { return m_PlaySoundMasterPrim; }
|
||||||
|
set { m_PlaySoundMasterPrim = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SceneObjectPart> m_PlaySoundSlavePrims = new List<SceneObjectPart>();
|
||||||
|
public List<SceneObjectPart> PlaySoundSlavePrims
|
||||||
|
{
|
||||||
|
get { return m_LoopSoundSlavePrims; }
|
||||||
|
set { m_LoopSoundSlavePrims = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private SceneObjectPart m_LoopSoundMasterPrim = null;
|
||||||
|
public SceneObjectPart LoopSoundMasterPrim
|
||||||
|
{
|
||||||
|
get { return m_LoopSoundMasterPrim; }
|
||||||
|
set { m_LoopSoundMasterPrim = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SceneObjectPart> m_LoopSoundSlavePrims = new List<SceneObjectPart>();
|
||||||
|
public List<SceneObjectPart> LoopSoundSlavePrims
|
||||||
|
{
|
||||||
|
get { return m_LoopSoundSlavePrims; }
|
||||||
|
set { m_LoopSoundSlavePrims = value; }
|
||||||
|
}
|
||||||
|
|
||||||
// The UUID for the Region this Object is in.
|
// The UUID for the Region this Object is in.
|
||||||
public UUID RegionUUID
|
public UUID RegionUUID
|
||||||
{
|
{
|
||||||
|
@ -584,7 +621,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (m_rootPart.Shape.PCode != 9 || m_rootPart.Shape.State == 0)
|
if (m_rootPart.Shape.PCode != 9 || m_rootPart.Shape.State == 0)
|
||||||
m_rootPart.ParentID = 0;
|
m_rootPart.ParentID = 0;
|
||||||
if (m_rootPart.LocalId==0)
|
if (m_rootPart.LocalId == 0)
|
||||||
m_rootPart.LocalId = m_scene.AllocateLocalId();
|
m_rootPart.LocalId = m_scene.AllocateLocalId();
|
||||||
|
|
||||||
// No need to lock here since the object isn't yet in a scene
|
// No need to lock here since the object isn't yet in a scene
|
||||||
|
@ -1586,6 +1623,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="part"></param>
|
/// <param name="part"></param>
|
||||||
internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags)
|
internal void SendPartFullUpdate(IClientAPI remoteClient, SceneObjectPart part, uint clientFlags)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[SOG]: Sendinging part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId);
|
||||||
|
|
||||||
if (m_rootPart.UUID == part.UUID)
|
if (m_rootPart.UUID == part.UUID)
|
||||||
{
|
{
|
||||||
if (IsAttachment)
|
if (IsAttachment)
|
||||||
|
@ -2084,7 +2124,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
{
|
{
|
||||||
|
if (!IsSelected)
|
||||||
|
part.UpdateLookAt();
|
||||||
|
|
||||||
part.SendScheduledUpdates();
|
part.SendScheduledUpdates();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2434,7 +2476,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
AttachToBackup();
|
AttachToBackup();
|
||||||
|
|
||||||
|
|
||||||
// Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the
|
// Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the
|
||||||
// position of linkset prims. IF YOU CHANGE THIS, YOU MUST TEST colliding with just linked and
|
// position of linkset prims. IF YOU CHANGE THIS, YOU MUST TEST colliding with just linked and
|
||||||
// unmoved prims!
|
// unmoved prims!
|
||||||
|
@ -2449,9 +2490,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// an independent SceneObjectGroup.
|
/// an independent SceneObjectGroup.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="partID"></param>
|
/// <param name="partID"></param>
|
||||||
public void DelinkFromGroup(uint partID)
|
/// <returns>The object group of the newly delinked prim. Null if part could not be found</returns>
|
||||||
|
public SceneObjectGroup DelinkFromGroup(uint partID)
|
||||||
{
|
{
|
||||||
DelinkFromGroup(partID, true);
|
return DelinkFromGroup(partID, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2460,28 +2502,39 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="partID"></param>
|
/// <param name="partID"></param>
|
||||||
/// <param name="sendEvents"></param>
|
/// <param name="sendEvents"></param>
|
||||||
public void DelinkFromGroup(uint partID, bool sendEvents)
|
/// <returns>The object group of the newly delinked prim. Null if part could not be found</returns>
|
||||||
|
public SceneObjectGroup DelinkFromGroup(uint partID, bool sendEvents)
|
||||||
{
|
{
|
||||||
SceneObjectPart linkPart = GetChildPart(partID);
|
SceneObjectPart linkPart = GetChildPart(partID);
|
||||||
|
|
||||||
if (linkPart != null)
|
if (linkPart != null)
|
||||||
{
|
{
|
||||||
DelinkFromGroup(linkPart, sendEvents);
|
return DelinkFromGroup(linkPart, sendEvents);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[SCENE OBJECT GROUP]: " +
|
m_log.WarnFormat("[SCENE OBJECT GROUP]: " +
|
||||||
"DelinkFromGroup(): Child prim {0} not found in object {1}, {2}",
|
"DelinkFromGroup(): Child prim {0} not found in object {1}, {2}",
|
||||||
partID, LocalId, UUID);
|
partID, LocalId, UUID);
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DelinkFromGroup(SceneObjectPart linkPart, bool sendEvents)
|
/// <summary>
|
||||||
|
/// Delink the given prim from this group. The delinked prim is established as
|
||||||
|
/// an independent SceneObjectGroup.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="partID"></param>
|
||||||
|
/// <param name="sendEvents"></param>
|
||||||
|
/// <returns>The object group of the newly delinked prim.</returns>
|
||||||
|
public SceneObjectGroup DelinkFromGroup(SceneObjectPart linkPart, bool sendEvents)
|
||||||
{
|
{
|
||||||
linkPart.ClearUndoState();
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT GROUP]: Delinking part {0}, {1} from group with root part {2}, {3}",
|
// "[SCENE OBJECT GROUP]: Delinking part {0}, {1} from group with root part {2}, {3}",
|
||||||
// linkPart.Name, linkPart.UUID, RootPart.Name, RootPart.UUID);
|
// linkPart.Name, linkPart.UUID, RootPart.Name, RootPart.UUID);
|
||||||
|
|
||||||
|
linkPart.ClearUndoState();
|
||||||
|
|
||||||
Quaternion worldRot = linkPart.GetWorldRotation();
|
Quaternion worldRot = linkPart.GetWorldRotation();
|
||||||
|
|
||||||
|
@ -2536,6 +2589,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
//HasGroupChanged = true;
|
//HasGroupChanged = true;
|
||||||
//ScheduleGroupForFullUpdate();
|
//ScheduleGroupForFullUpdate();
|
||||||
|
|
||||||
|
return objectGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2574,7 +2629,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
part.LinkNum = linkNum;
|
part.LinkNum = linkNum;
|
||||||
|
|
||||||
|
|
||||||
part.OffsetPosition = part.GroupPosition - AbsolutePosition;
|
part.OffsetPosition = part.GroupPosition - AbsolutePosition;
|
||||||
|
|
||||||
Quaternion rootRotation = m_rootPart.RotationOffset;
|
Quaternion rootRotation = m_rootPart.RotationOffset;
|
||||||
|
@ -2604,11 +2658,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (m_rootPart.PhysActor.IsPhysical)
|
if (m_rootPart.PhysActor.IsPhysical)
|
||||||
{
|
{
|
||||||
Vector3 llmoveforce = pos - AbsolutePosition;
|
if (!m_rootPart.BlockGrab)
|
||||||
Vector3 grabforce = llmoveforce;
|
{
|
||||||
grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass;
|
Vector3 llmoveforce = pos - AbsolutePosition;
|
||||||
m_rootPart.PhysActor.AddForce(grabforce,true);
|
Vector3 grabforce = llmoveforce;
|
||||||
m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor);
|
grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass;
|
||||||
|
m_rootPart.PhysActor.AddForce(grabforce, true);
|
||||||
|
m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2966,6 +3023,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SceneObjectPart part = GetChildPart(localID);
|
SceneObjectPart part = GetChildPart(localID);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
|
part.IgnoreUndoUpdate = true;
|
||||||
if (scale.X > m_scene.m_maxNonphys)
|
if (scale.X > m_scene.m_maxNonphys)
|
||||||
scale.X = m_scene.m_maxNonphys;
|
scale.X = m_scene.m_maxNonphys;
|
||||||
if (scale.Y > m_scene.m_maxNonphys)
|
if (scale.Y > m_scene.m_maxNonphys)
|
||||||
|
@ -2992,6 +3050,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (obPart.UUID != m_rootPart.UUID)
|
if (obPart.UUID != m_rootPart.UUID)
|
||||||
{
|
{
|
||||||
|
obPart.IgnoreUndoUpdate = true;
|
||||||
Vector3 oldSize = new Vector3(obPart.Scale);
|
Vector3 oldSize = new Vector3(obPart.Scale);
|
||||||
|
|
||||||
float f = 1.0f;
|
float f = 1.0f;
|
||||||
|
@ -3050,6 +3109,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
y *= a;
|
y *= a;
|
||||||
z *= a;
|
z *= a;
|
||||||
}
|
}
|
||||||
|
obPart.IgnoreUndoUpdate = false;
|
||||||
|
obPart.StoreUndoState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3066,6 +3127,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
foreach (SceneObjectPart obPart in m_parts.Values)
|
foreach (SceneObjectPart obPart in m_parts.Values)
|
||||||
{
|
{
|
||||||
|
obPart.IgnoreUndoUpdate = true;
|
||||||
if (obPart.UUID != m_rootPart.UUID)
|
if (obPart.UUID != m_rootPart.UUID)
|
||||||
{
|
{
|
||||||
Vector3 currentpos = new Vector3(obPart.OffsetPosition);
|
Vector3 currentpos = new Vector3(obPart.OffsetPosition);
|
||||||
|
@ -3079,6 +3141,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
obPart.Resize(newSize);
|
obPart.Resize(newSize);
|
||||||
obPart.UpdateOffSet(currentpos);
|
obPart.UpdateOffSet(currentpos);
|
||||||
}
|
}
|
||||||
|
obPart.IgnoreUndoUpdate = false;
|
||||||
|
obPart.StoreUndoState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lockPartsForRead(false);
|
lockPartsForRead(false);
|
||||||
|
@ -3089,6 +3153,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor);
|
m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
part.IgnoreUndoUpdate = false;
|
||||||
|
part.StoreUndoState();
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
ScheduleGroupForTerseUpdate();
|
ScheduleGroupForTerseUpdate();
|
||||||
}
|
}
|
||||||
|
@ -3104,13 +3170,26 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="pos"></param>
|
/// <param name="pos"></param>
|
||||||
public void UpdateGroupPosition(Vector3 pos)
|
public void UpdateGroupPosition(Vector3 pos)
|
||||||
{
|
{
|
||||||
|
foreach (SceneObjectPart part in Children.Values)
|
||||||
|
{
|
||||||
|
part.StoreUndoState();
|
||||||
|
}
|
||||||
if (m_scene.EventManager.TriggerGroupMove(UUID, pos))
|
if (m_scene.EventManager.TriggerGroupMove(UUID, pos))
|
||||||
{
|
{
|
||||||
if (IsAttachment)
|
if (IsAttachment)
|
||||||
{
|
{
|
||||||
m_rootPart.AttachedPos = pos;
|
m_rootPart.AttachedPos = pos;
|
||||||
}
|
}
|
||||||
|
if (RootPart.GetStatusSandbox())
|
||||||
|
{
|
||||||
|
if (Util.GetDistanceTo(RootPart.StatusSandboxPos, pos) > 10)
|
||||||
|
{
|
||||||
|
RootPart.ScriptSetPhysicsStatus(false);
|
||||||
|
pos = AbsolutePosition;
|
||||||
|
Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"),
|
||||||
|
ChatTypeEnum.DebugChannel, 0x7FFFFFFF, RootPart.AbsolutePosition, Name, UUID, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
AbsolutePosition = pos;
|
AbsolutePosition = pos;
|
||||||
|
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
|
@ -3129,7 +3208,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public void UpdateSinglePosition(Vector3 pos, uint localID)
|
public void UpdateSinglePosition(Vector3 pos, uint localID)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = GetChildPart(localID);
|
SceneObjectPart part = GetChildPart(localID);
|
||||||
|
foreach (SceneObjectPart parts in Children.Values)
|
||||||
|
{
|
||||||
|
parts.StoreUndoState();
|
||||||
|
}
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
if (part.UUID == m_rootPart.UUID)
|
if (part.UUID == m_rootPart.UUID)
|
||||||
|
@ -3151,6 +3233,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="pos"></param>
|
/// <param name="pos"></param>
|
||||||
private void UpdateRootPosition(Vector3 pos)
|
private void UpdateRootPosition(Vector3 pos)
|
||||||
{
|
{
|
||||||
|
foreach (SceneObjectPart part in Children.Values)
|
||||||
|
{
|
||||||
|
part.StoreUndoState();
|
||||||
|
}
|
||||||
Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
|
Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
|
||||||
Vector3 oldPos =
|
Vector3 oldPos =
|
||||||
new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X,
|
new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X,
|
||||||
|
@ -3195,6 +3281,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="rot"></param>
|
/// <param name="rot"></param>
|
||||||
public void UpdateGroupRotationR(Quaternion rot)
|
public void UpdateGroupRotationR(Quaternion rot)
|
||||||
{
|
{
|
||||||
|
foreach (SceneObjectPart parts in Children.Values)
|
||||||
|
{
|
||||||
|
parts.StoreUndoState();
|
||||||
|
}
|
||||||
m_rootPart.UpdateRotation(rot);
|
m_rootPart.UpdateRotation(rot);
|
||||||
|
|
||||||
PhysicsActor actor = m_rootPart.PhysActor;
|
PhysicsActor actor = m_rootPart.PhysActor;
|
||||||
|
@ -3215,6 +3305,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="rot"></param>
|
/// <param name="rot"></param>
|
||||||
public void UpdateGroupRotationPR(Vector3 pos, Quaternion rot)
|
public void UpdateGroupRotationPR(Vector3 pos, Quaternion rot)
|
||||||
{
|
{
|
||||||
|
foreach (SceneObjectPart parts in Children.Values)
|
||||||
|
{
|
||||||
|
parts.StoreUndoState();
|
||||||
|
}
|
||||||
m_rootPart.UpdateRotation(rot);
|
m_rootPart.UpdateRotation(rot);
|
||||||
|
|
||||||
PhysicsActor actor = m_rootPart.PhysActor;
|
PhysicsActor actor = m_rootPart.PhysActor;
|
||||||
|
@ -3238,6 +3332,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public void UpdateSingleRotation(Quaternion rot, uint localID)
|
public void UpdateSingleRotation(Quaternion rot, uint localID)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = GetChildPart(localID);
|
SceneObjectPart part = GetChildPart(localID);
|
||||||
|
foreach (SceneObjectPart parts in Children.Values)
|
||||||
|
{
|
||||||
|
parts.StoreUndoState();
|
||||||
|
}
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
if (part.UUID == m_rootPart.UUID)
|
if (part.UUID == m_rootPart.UUID)
|
||||||
|
@ -3268,8 +3366,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
part.IgnoreUndoUpdate = true;
|
||||||
part.UpdateRotation(rot);
|
part.UpdateRotation(rot);
|
||||||
part.OffsetPosition = pos;
|
part.OffsetPosition = pos;
|
||||||
|
part.IgnoreUndoUpdate = false;
|
||||||
|
part.StoreUndoState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3283,6 +3384,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Quaternion axRot = rot;
|
Quaternion axRot = rot;
|
||||||
Quaternion oldParentRot = m_rootPart.RotationOffset;
|
Quaternion oldParentRot = m_rootPart.RotationOffset;
|
||||||
|
|
||||||
|
m_rootPart.StoreUndoState();
|
||||||
m_rootPart.UpdateRotation(rot);
|
m_rootPart.UpdateRotation(rot);
|
||||||
if (m_rootPart.PhysActor != null)
|
if (m_rootPart.PhysActor != null)
|
||||||
{
|
{
|
||||||
|
@ -3291,23 +3393,33 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
lockPartsForRead(true);
|
lockPartsForRead(true);
|
||||||
|
|
||||||
|
foreach (SceneObjectPart prim in m_parts.Values)
|
||||||
{
|
{
|
||||||
foreach (SceneObjectPart prim in m_parts.Values)
|
if (prim.UUID != m_rootPart.UUID)
|
||||||
{
|
{
|
||||||
if (prim.UUID != m_rootPart.UUID)
|
prim.IgnoreUndoUpdate = true;
|
||||||
{
|
Vector3 axPos = prim.OffsetPosition;
|
||||||
Vector3 axPos = prim.OffsetPosition;
|
axPos *= oldParentRot;
|
||||||
axPos *= oldParentRot;
|
axPos *= Quaternion.Inverse(axRot);
|
||||||
axPos *= Quaternion.Inverse(axRot);
|
prim.OffsetPosition = axPos;
|
||||||
prim.OffsetPosition = axPos;
|
Quaternion primsRot = prim.RotationOffset;
|
||||||
Quaternion primsRot = prim.RotationOffset;
|
Quaternion newRot = primsRot * oldParentRot;
|
||||||
Quaternion newRot = primsRot * oldParentRot;
|
newRot *= Quaternion.Inverse(axRot);
|
||||||
newRot *= Quaternion.Inverse(axRot);
|
prim.RotationOffset = newRot;
|
||||||
prim.RotationOffset = newRot;
|
prim.ScheduleTerseUpdate();
|
||||||
prim.ScheduleTerseUpdate();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (SceneObjectPart childpart in Children.Values)
|
||||||
|
{
|
||||||
|
if (childpart != m_rootPart)
|
||||||
|
{
|
||||||
|
childpart.IgnoreUndoUpdate = false;
|
||||||
|
childpart.StoreUndoState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
lockPartsForRead(false);
|
lockPartsForRead(false);
|
||||||
|
|
||||||
m_rootPart.ScheduleTerseUpdate();
|
m_rootPart.ScheduleTerseUpdate();
|
||||||
|
|
|
@ -133,6 +133,18 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
public bool DIE_AT_EDGE;
|
public bool DIE_AT_EDGE;
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public bool RETURN_AT_EDGE;
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public bool BlockGrab;
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public bool StatusSandbox;
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public Vector3 StatusSandboxPos;
|
||||||
|
|
||||||
// TODO: This needs to be persisted in next XML version update!
|
// TODO: This needs to be persisted in next XML version update!
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
public int[] PayPrice = {-2,-2,-2,-2,-2};
|
public int[] PayPrice = {-2,-2,-2,-2,-2};
|
||||||
|
@ -219,6 +231,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
public Quaternion SpinOldOrientation = Quaternion.Identity;
|
public Quaternion SpinOldOrientation = Quaternion.Identity;
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public Quaternion m_APIDTarget = Quaternion.Identity;
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public float m_APIDDamp = 0;
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public float m_APIDStrength = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This part's inventory
|
/// This part's inventory
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -232,6 +253,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
public bool Undoing;
|
public bool Undoing;
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public bool IgnoreUndoUpdate = false;
|
||||||
|
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
private PrimFlags LocalFlags;
|
private PrimFlags LocalFlags;
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
|
@ -254,6 +278,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private string m_text = String.Empty;
|
private string m_text = String.Empty;
|
||||||
private string m_touchName = String.Empty;
|
private string m_touchName = String.Empty;
|
||||||
private readonly UndoStack<UndoState> m_undo = new UndoStack<UndoState>(5);
|
private readonly UndoStack<UndoState> m_undo = new UndoStack<UndoState>(5);
|
||||||
|
private readonly UndoStack<UndoState> m_redo = new UndoStack<UndoState>(5);
|
||||||
private UUID _creatorID;
|
private UUID _creatorID;
|
||||||
|
|
||||||
private bool m_passTouches;
|
private bool m_passTouches;
|
||||||
|
@ -506,6 +531,27 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public Quaternion APIDTarget
|
||||||
|
{
|
||||||
|
get { return m_APIDTarget; }
|
||||||
|
set { m_APIDTarget = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public float APIDDamp
|
||||||
|
{
|
||||||
|
get { return m_APIDDamp; }
|
||||||
|
set { m_APIDDamp = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlIgnore]
|
||||||
|
public float APIDStrength
|
||||||
|
{
|
||||||
|
get { return m_APIDStrength; }
|
||||||
|
set { m_APIDStrength = value; }
|
||||||
|
}
|
||||||
|
|
||||||
public ulong RegionHandle
|
public ulong RegionHandle
|
||||||
{
|
{
|
||||||
get { return m_regionHandle; }
|
get { return m_regionHandle; }
|
||||||
|
@ -517,6 +563,33 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
get { return m_scriptAccessPin; }
|
get { return m_scriptAccessPin; }
|
||||||
set { m_scriptAccessPin = (int)value; }
|
set { m_scriptAccessPin = (int)value; }
|
||||||
}
|
}
|
||||||
|
private SceneObjectPart m_PlaySoundMasterPrim = null;
|
||||||
|
public SceneObjectPart PlaySoundMasterPrim
|
||||||
|
{
|
||||||
|
get { return m_PlaySoundMasterPrim; }
|
||||||
|
set { m_PlaySoundMasterPrim = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SceneObjectPart> m_PlaySoundSlavePrims = new List<SceneObjectPart>();
|
||||||
|
public List<SceneObjectPart> PlaySoundSlavePrims
|
||||||
|
{
|
||||||
|
get { return m_LoopSoundSlavePrims; }
|
||||||
|
set { m_LoopSoundSlavePrims = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private SceneObjectPart m_LoopSoundMasterPrim = null;
|
||||||
|
public SceneObjectPart LoopSoundMasterPrim
|
||||||
|
{
|
||||||
|
get { return m_LoopSoundMasterPrim; }
|
||||||
|
set { m_LoopSoundMasterPrim = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SceneObjectPart> m_LoopSoundSlavePrims = new List<SceneObjectPart>();
|
||||||
|
public List<SceneObjectPart> LoopSoundSlavePrims
|
||||||
|
{
|
||||||
|
get { return m_LoopSoundSlavePrims; }
|
||||||
|
set { m_LoopSoundSlavePrims = value; }
|
||||||
|
}
|
||||||
|
|
||||||
public Byte[] TextureAnimation
|
public Byte[] TextureAnimation
|
||||||
{
|
{
|
||||||
|
@ -576,8 +649,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
StoreUndoState();
|
|
||||||
|
|
||||||
m_groupPosition = value;
|
m_groupPosition = value;
|
||||||
PhysicsActor actor = PhysActor;
|
PhysicsActor actor = PhysActor;
|
||||||
if (actor != null)
|
if (actor != null)
|
||||||
|
@ -1403,6 +1474,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
m_undo.Clear();
|
m_undo.Clear();
|
||||||
}
|
}
|
||||||
|
lock (m_redo)
|
||||||
|
{
|
||||||
|
m_redo.Clear();
|
||||||
|
}
|
||||||
StoreUndoState();
|
StoreUndoState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1713,6 +1788,66 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return m_parentGroup.RootPart.DIE_AT_EDGE;
|
return m_parentGroup.RootPart.DIE_AT_EDGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool GetReturnAtEdge()
|
||||||
|
{
|
||||||
|
if (m_parentGroup == null)
|
||||||
|
return false;
|
||||||
|
if (m_parentGroup.IsDeleted)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_parentGroup.RootPart.RETURN_AT_EDGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetReturnAtEdge(bool p)
|
||||||
|
{
|
||||||
|
if (m_parentGroup == null)
|
||||||
|
return;
|
||||||
|
if (m_parentGroup.IsDeleted)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_parentGroup.RootPart.RETURN_AT_EDGE = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool GetBlockGrab()
|
||||||
|
{
|
||||||
|
if (m_parentGroup == null)
|
||||||
|
return false;
|
||||||
|
if (m_parentGroup.IsDeleted)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_parentGroup.RootPart.BlockGrab;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetBlockGrab(bool p)
|
||||||
|
{
|
||||||
|
if (m_parentGroup == null)
|
||||||
|
return;
|
||||||
|
if (m_parentGroup.IsDeleted)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_parentGroup.RootPart.BlockGrab = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetStatusSandbox(bool p)
|
||||||
|
{
|
||||||
|
if (m_parentGroup == null)
|
||||||
|
return;
|
||||||
|
if (m_parentGroup.IsDeleted)
|
||||||
|
return;
|
||||||
|
StatusSandboxPos = m_parentGroup.RootPart.AbsolutePosition;
|
||||||
|
m_parentGroup.RootPart.StatusSandbox = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool GetStatusSandbox()
|
||||||
|
{
|
||||||
|
if (m_parentGroup == null)
|
||||||
|
return false;
|
||||||
|
if (m_parentGroup.IsDeleted)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return m_parentGroup.RootPart.StatusSandbox;
|
||||||
|
}
|
||||||
|
|
||||||
public int GetAxisRotation(int axis)
|
public int GetAxisRotation(int axis)
|
||||||
{
|
{
|
||||||
//Cannot use ScriptBaseClass constants as no referance to it currently.
|
//Cannot use ScriptBaseClass constants as no referance to it currently.
|
||||||
|
@ -1924,7 +2059,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// play the sound.
|
// play the sound.
|
||||||
if (startedColliders.Count > 0 && CollisionSound != UUID.Zero && CollisionSoundVolume > 0.0f)
|
if (startedColliders.Count > 0 && CollisionSound != UUID.Zero && CollisionSoundVolume > 0.0f)
|
||||||
{
|
{
|
||||||
SendSound(CollisionSound.ToString(), CollisionSoundVolume, true, (byte)0);
|
SendSound(CollisionSound.ToString(), CollisionSoundVolume, true, (byte)0, 0, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_start) != 0)
|
if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_start) != 0)
|
||||||
|
@ -2499,9 +2634,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
List<ScenePresence> avatarts = m_parentGroup.Scene.GetAvatars();
|
List<ScenePresence> avatarts = m_parentGroup.Scene.GetAvatars();
|
||||||
foreach (ScenePresence p in avatarts)
|
foreach (ScenePresence p in avatarts)
|
||||||
{
|
{
|
||||||
// TODO: some filtering by distance of avatar
|
if (!(Util.GetDistanceTo(p.AbsolutePosition, AbsolutePosition) >= 100))
|
||||||
|
p.ControllingClient.SendPreLoadSound(objectID, objectID, soundID);
|
||||||
p.ControllingClient.SendPreLoadSound(objectID, objectID, soundID);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2562,7 +2696,38 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public void RotLookAt(Quaternion target, float strength, float damping)
|
public void RotLookAt(Quaternion target, float strength, float damping)
|
||||||
{
|
{
|
||||||
m_parentGroup.rotLookAt(target, strength, damping);
|
rotLookAt(target, strength, damping);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rotLookAt(Quaternion target, float strength, float damping)
|
||||||
|
{
|
||||||
|
if (IsAttachment)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
ScenePresence avatar = m_scene.GetScenePresence(rootpart.AttachedAvatar);
|
||||||
|
if (avatar != null)
|
||||||
|
{
|
||||||
|
Rotate the Av?
|
||||||
|
} */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
APIDDamp = damping;
|
||||||
|
APIDStrength = strength;
|
||||||
|
APIDTarget = target;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startLookAt(Quaternion rot, float damp, float strength)
|
||||||
|
{
|
||||||
|
APIDDamp = damp;
|
||||||
|
APIDStrength = strength;
|
||||||
|
APIDTarget = rot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stopLookAt()
|
||||||
|
{
|
||||||
|
APIDTarget = Quaternion.Identity;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2824,7 +2989,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="volume"></param>
|
/// <param name="volume"></param>
|
||||||
/// <param name="triggered"></param>
|
/// <param name="triggered"></param>
|
||||||
/// <param name="flags"></param>
|
/// <param name="flags"></param>
|
||||||
public void SendSound(string sound, double volume, bool triggered, byte flags)
|
public void SendSound(string sound, double volume, bool triggered, byte flags, float radius, bool useMaster, bool isMaster)
|
||||||
{
|
{
|
||||||
if (volume > 1)
|
if (volume > 1)
|
||||||
volume = 1;
|
volume = 1;
|
||||||
|
@ -2859,10 +3024,51 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
ISoundModule soundModule = m_parentGroup.Scene.RequestModuleInterface<ISoundModule>();
|
ISoundModule soundModule = m_parentGroup.Scene.RequestModuleInterface<ISoundModule>();
|
||||||
if (soundModule != null)
|
if (soundModule != null)
|
||||||
{
|
{
|
||||||
if (triggered)
|
if (useMaster)
|
||||||
soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle);
|
{
|
||||||
|
if (isMaster)
|
||||||
|
{
|
||||||
|
if (triggered)
|
||||||
|
soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius);
|
||||||
|
else
|
||||||
|
soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius);
|
||||||
|
ParentGroup.PlaySoundMasterPrim = this;
|
||||||
|
ownerID = this._ownerID;
|
||||||
|
objectID = this.UUID;
|
||||||
|
parentID = this.GetRootPartUUID();
|
||||||
|
position = this.AbsolutePosition; // region local
|
||||||
|
regionHandle = this.ParentGroup.Scene.RegionInfo.RegionHandle;
|
||||||
|
if (triggered)
|
||||||
|
soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius);
|
||||||
|
else
|
||||||
|
soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius);
|
||||||
|
foreach (SceneObjectPart prim in ParentGroup.PlaySoundSlavePrims)
|
||||||
|
{
|
||||||
|
ownerID = prim._ownerID;
|
||||||
|
objectID = prim.UUID;
|
||||||
|
parentID = prim.GetRootPartUUID();
|
||||||
|
position = prim.AbsolutePosition; // region local
|
||||||
|
regionHandle = prim.ParentGroup.Scene.RegionInfo.RegionHandle;
|
||||||
|
if (triggered)
|
||||||
|
soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius);
|
||||||
|
else
|
||||||
|
soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius);
|
||||||
|
}
|
||||||
|
ParentGroup.PlaySoundSlavePrims.Clear();
|
||||||
|
ParentGroup.PlaySoundMasterPrim = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ParentGroup.PlaySoundSlavePrims.Add(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags);
|
{
|
||||||
|
if (triggered)
|
||||||
|
soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, radius);
|
||||||
|
else
|
||||||
|
soundModule.PlayAttachedSound(soundID, ownerID, objectID, volume, position, flags, radius);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3181,6 +3387,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
hasProfileCut = hasDimple; // is it the same thing?
|
hasProfileCut = hasDimple; // is it the same thing?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetVehicleFlags(int param, bool remove)
|
||||||
|
{
|
||||||
|
if (PhysActor != null)
|
||||||
|
{
|
||||||
|
PhysActor.VehicleFlags(param, remove);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void SetGroup(UUID groupID, IClientAPI client)
|
public void SetGroup(UUID groupID, IClientAPI client)
|
||||||
{
|
{
|
||||||
_groupID = groupID;
|
_groupID = groupID;
|
||||||
|
@ -3285,27 +3499,30 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (!Undoing)
|
if (!Undoing)
|
||||||
{
|
{
|
||||||
if (m_parentGroup != null)
|
if (!IgnoreUndoUpdate)
|
||||||
{
|
{
|
||||||
lock (m_undo)
|
if (m_parentGroup != null)
|
||||||
{
|
{
|
||||||
if (m_undo.Count > 0)
|
lock (m_undo)
|
||||||
{
|
{
|
||||||
UndoState last = m_undo.Peek();
|
if (m_undo.Count > 0)
|
||||||
if (last != null)
|
|
||||||
{
|
{
|
||||||
if (last.Compare(this))
|
UndoState last = m_undo.Peek();
|
||||||
return;
|
if (last != null)
|
||||||
|
{
|
||||||
|
if (last.Compare(this))
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_parentGroup.GetSceneMaxUndo() > 0)
|
||||||
|
{
|
||||||
|
UndoState nUndo = new UndoState(this);
|
||||||
|
|
||||||
|
m_undo.Push(nUndo);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_parentGroup.GetSceneMaxUndo() > 0)
|
|
||||||
{
|
|
||||||
UndoState nUndo = new UndoState(this);
|
|
||||||
|
|
||||||
m_undo.Push(nUndo);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3776,14 +3993,39 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
lock (m_undo)
|
lock (m_undo)
|
||||||
{
|
{
|
||||||
if (m_undo.Count > 0)
|
if (m_undo.Count > 0)
|
||||||
|
{
|
||||||
|
UndoState nUndo = null;
|
||||||
|
if (m_parentGroup.GetSceneMaxUndo() > 0)
|
||||||
{
|
{
|
||||||
UndoState goback = m_undo.Pop();
|
nUndo = new UndoState(this);
|
||||||
if (goback != null)
|
}
|
||||||
goback.PlaybackState(this);
|
UndoState goback = m_undo.Pop();
|
||||||
|
if (goback != null)
|
||||||
|
{
|
||||||
|
goback.PlaybackState(this);
|
||||||
|
if (nUndo != null)
|
||||||
|
m_redo.Push(nUndo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Redo()
|
||||||
|
{
|
||||||
|
lock (m_redo)
|
||||||
|
{
|
||||||
|
if (m_parentGroup.GetSceneMaxUndo() > 0)
|
||||||
|
{
|
||||||
|
UndoState nUndo = new UndoState(this);
|
||||||
|
|
||||||
|
m_undo.Push(nUndo);
|
||||||
|
}
|
||||||
|
UndoState gofwd = m_redo.Pop();
|
||||||
|
if (gofwd != null)
|
||||||
|
gofwd.PlayfwdState(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateExtraParam(ushort type, bool inUse, byte[] data)
|
public void UpdateExtraParam(ushort type, bool inUse, byte[] data)
|
||||||
{
|
{
|
||||||
m_shape.ReadInUpdateExtraParam(type, inUse, data);
|
m_shape.ReadInUpdateExtraParam(type, inUse, data);
|
||||||
|
@ -3827,6 +4069,18 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
(pos.Z != OffsetPosition.Z))
|
(pos.Z != OffsetPosition.Z))
|
||||||
{
|
{
|
||||||
Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
|
Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
|
||||||
|
|
||||||
|
if (ParentGroup.RootPart.GetStatusSandbox())
|
||||||
|
{
|
||||||
|
if (Util.GetDistanceTo(ParentGroup.RootPart.StatusSandboxPos, newPos) > 10)
|
||||||
|
{
|
||||||
|
ParentGroup.RootPart.ScriptSetPhysicsStatus(false);
|
||||||
|
newPos = OffsetPosition;
|
||||||
|
ParentGroup.Scene.SimChat(Utils.StringToBytes("Hit Sandbox Limit"),
|
||||||
|
ChatTypeEnum.DebugChannel, 0x7FFFFFFF, ParentGroup.RootPart.AbsolutePosition, Name, UUID, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OffsetPosition = newPos;
|
OffsetPosition = newPos;
|
||||||
ScheduleTerseUpdate();
|
ScheduleTerseUpdate();
|
||||||
}
|
}
|
||||||
|
@ -4119,7 +4373,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
(rot.Z != RotationOffset.Z) ||
|
(rot.Z != RotationOffset.Z) ||
|
||||||
(rot.W != RotationOffset.W))
|
(rot.W != RotationOffset.W))
|
||||||
{
|
{
|
||||||
//StoreUndoState();
|
|
||||||
RotationOffset = rot;
|
RotationOffset = rot;
|
||||||
ParentGroup.HasGroupChanged = true;
|
ParentGroup.HasGroupChanged = true;
|
||||||
ScheduleTerseUpdate();
|
ScheduleTerseUpdate();
|
||||||
|
@ -4303,7 +4556,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents()", Name, LocalId);
|
// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents()", Name, LocalId);
|
||||||
ScheduleFullUpdate();
|
ScheduleFullUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4421,5 +4674,41 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
Inventory.ApplyNextOwnerPermissions();
|
Inventory.ApplyNextOwnerPermissions();
|
||||||
}
|
}
|
||||||
|
public void UpdateLookAt()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (APIDTarget != Quaternion.Identity)
|
||||||
|
{
|
||||||
|
if (Single.IsNaN(APIDTarget.W) == true)
|
||||||
|
{
|
||||||
|
APIDTarget = Quaternion.Identity;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Quaternion rot = RotationOffset;
|
||||||
|
Quaternion dir = (rot - APIDTarget);
|
||||||
|
float speed = ((APIDStrength / APIDDamp) * (float)(Math.PI / 180.0f));
|
||||||
|
if (dir.Z > speed)
|
||||||
|
{
|
||||||
|
rot.Z -= speed;
|
||||||
|
}
|
||||||
|
if (dir.Z < -speed)
|
||||||
|
{
|
||||||
|
rot.Z += speed;
|
||||||
|
}
|
||||||
|
rot.Normalize();
|
||||||
|
UpdateRotation(rot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
m_log.Error("[Physics] " + ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color4 GetTextColor()
|
||||||
|
{
|
||||||
|
return new Color4((byte)Color.R, (byte)Color.G, (byte)Color.B, (byte)(0xFF - Color.A));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,8 +318,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
|
|
||||||
|
|
||||||
private void RestoreSavedScriptState(UUID oldID, UUID newID)
|
private void RestoreSavedScriptState(UUID oldID, UUID newID)
|
||||||
{
|
{
|
||||||
IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
|
IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
|
||||||
|
@ -585,7 +583,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_items.TryGetValue(itemId, out item);
|
m_items.TryGetValue(itemId, out item);
|
||||||
m_items.LockItemsForRead(false);
|
m_items.LockItemsForRead(false);
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get inventory items by name.
|
/// Get inventory items by name.
|
||||||
|
@ -594,7 +592,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <returns>
|
/// <returns>
|
||||||
/// A list of inventory items with that name.
|
/// A list of inventory items with that name.
|
||||||
/// If no inventory item has that name then an empty list is returned.
|
/// If no inventory item has that name then an empty list is returned.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
public IList<TaskInventoryItem> GetInventoryItems(string name)
|
public IList<TaskInventoryItem> GetInventoryItems(string name)
|
||||||
{
|
{
|
||||||
IList<TaskInventoryItem> items = new List<TaskInventoryItem>();
|
IList<TaskInventoryItem> items = new List<TaskInventoryItem>();
|
||||||
|
|
|
@ -167,6 +167,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
private Quaternion m_bodyRot= Quaternion.Identity;
|
private Quaternion m_bodyRot= Quaternion.Identity;
|
||||||
|
|
||||||
|
private Quaternion m_bodyRotPrevious = Quaternion.Identity;
|
||||||
|
|
||||||
private const int LAND_VELOCITYMAG_MAX = 12;
|
private const int LAND_VELOCITYMAG_MAX = 12;
|
||||||
|
|
||||||
public bool IsRestrictedToRegion;
|
public bool IsRestrictedToRegion;
|
||||||
|
@ -233,7 +235,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Agent's Draw distance.
|
// Agent's Draw distance.
|
||||||
protected float m_DrawDistance;
|
protected float m_DrawDistance;
|
||||||
|
|
||||||
protected AvatarAppearance m_appearance;
|
protected AvatarAppearance m_appearance;
|
||||||
|
|
||||||
// neighbouring regions we have enabled a child agent in
|
// neighbouring regions we have enabled a child agent in
|
||||||
// holds the seed cap for the child agent in that region
|
// holds the seed cap for the child agent in that region
|
||||||
|
@ -518,6 +520,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
set { m_bodyRot = value; }
|
set { m_bodyRot = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Quaternion PreviousRotation
|
||||||
|
{
|
||||||
|
get { return m_bodyRotPrevious; }
|
||||||
|
set { m_bodyRotPrevious = value; }
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If this is true, agent doesn't have a representation in this scene.
|
/// If this is true, agent doesn't have a representation in this scene.
|
||||||
/// this is an agent 'looking into' this scene from a nearby scene(region)
|
/// this is an agent 'looking into' this scene from a nearby scene(region)
|
||||||
|
@ -650,7 +658,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
#region Constructor(s)
|
#region Constructor(s)
|
||||||
|
|
||||||
public ScenePresence()
|
public ScenePresence()
|
||||||
{
|
{
|
||||||
m_sendCourseLocationsMethod = SendCoarseLocationsDefault;
|
m_sendCourseLocationsMethod = SendCoarseLocationsDefault;
|
||||||
CreateSceneViewer();
|
CreateSceneViewer();
|
||||||
m_animator = new ScenePresenceAnimator(this);
|
m_animator = new ScenePresenceAnimator(this);
|
||||||
|
@ -868,6 +876,31 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (pos.X < 0 || pos.Y < 0 || pos.Z < 0)
|
if (pos.X < 0 || pos.Y < 0 || pos.Z < 0)
|
||||||
{
|
{
|
||||||
Vector3 emergencyPos = new Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 128);
|
Vector3 emergencyPos = new Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 128);
|
||||||
|
|
||||||
|
if (pos.X < 0)
|
||||||
|
{
|
||||||
|
emergencyPos.X = (int)Constants.RegionSize + pos.X;
|
||||||
|
if (!(pos.Y < 0))
|
||||||
|
emergencyPos.Y = pos.Y;
|
||||||
|
if (!(pos.Z < 0))
|
||||||
|
emergencyPos.X = pos.X;
|
||||||
|
}
|
||||||
|
if (pos.Y < 0)
|
||||||
|
{
|
||||||
|
emergencyPos.Y = (int)Constants.RegionSize + pos.Y;
|
||||||
|
if (!(pos.X < 0))
|
||||||
|
emergencyPos.X = pos.X;
|
||||||
|
if (!(pos.Z < 0))
|
||||||
|
emergencyPos.Z = pos.Z;
|
||||||
|
}
|
||||||
|
if (pos.Z < 0)
|
||||||
|
{
|
||||||
|
if (!(pos.X < 0))
|
||||||
|
emergencyPos.X = pos.X;
|
||||||
|
if (!(pos.Y < 0))
|
||||||
|
emergencyPos.Y = pos.Y;
|
||||||
|
//Leave as 128
|
||||||
|
}
|
||||||
|
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}",
|
"[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}",
|
||||||
|
@ -2900,36 +2933,75 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
// Checks if where it's headed exists a region
|
// Checks if where it's headed exists a region
|
||||||
|
|
||||||
|
bool needsTransit = false;
|
||||||
if (m_scene.TestBorderCross(pos2, Cardinals.W))
|
if (m_scene.TestBorderCross(pos2, Cardinals.W))
|
||||||
{
|
{
|
||||||
if (m_scene.TestBorderCross(pos2, Cardinals.S))
|
if (m_scene.TestBorderCross(pos2, Cardinals.S))
|
||||||
|
{
|
||||||
|
needsTransit = true;
|
||||||
neighbor = HaveNeighbor(Cardinals.SW, ref fix);
|
neighbor = HaveNeighbor(Cardinals.SW, ref fix);
|
||||||
|
}
|
||||||
else if (m_scene.TestBorderCross(pos2, Cardinals.N))
|
else if (m_scene.TestBorderCross(pos2, Cardinals.N))
|
||||||
|
{
|
||||||
|
needsTransit = true;
|
||||||
neighbor = HaveNeighbor(Cardinals.NW, ref fix);
|
neighbor = HaveNeighbor(Cardinals.NW, ref fix);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
needsTransit = true;
|
||||||
neighbor = HaveNeighbor(Cardinals.W, ref fix);
|
neighbor = HaveNeighbor(Cardinals.W, ref fix);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (m_scene.TestBorderCross(pos2, Cardinals.E))
|
else if (m_scene.TestBorderCross(pos2, Cardinals.E))
|
||||||
{
|
{
|
||||||
if (m_scene.TestBorderCross(pos2, Cardinals.S))
|
if (m_scene.TestBorderCross(pos2, Cardinals.S))
|
||||||
|
{
|
||||||
|
needsTransit = true;
|
||||||
neighbor = HaveNeighbor(Cardinals.SE, ref fix);
|
neighbor = HaveNeighbor(Cardinals.SE, ref fix);
|
||||||
|
}
|
||||||
else if (m_scene.TestBorderCross(pos2, Cardinals.N))
|
else if (m_scene.TestBorderCross(pos2, Cardinals.N))
|
||||||
|
{
|
||||||
|
needsTransit = true;
|
||||||
neighbor = HaveNeighbor(Cardinals.NE, ref fix);
|
neighbor = HaveNeighbor(Cardinals.NE, ref fix);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
needsTransit = true;
|
||||||
neighbor = HaveNeighbor(Cardinals.E, ref fix);
|
neighbor = HaveNeighbor(Cardinals.E, ref fix);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (m_scene.TestBorderCross(pos2, Cardinals.S))
|
else if (m_scene.TestBorderCross(pos2, Cardinals.S))
|
||||||
|
{
|
||||||
|
needsTransit = true;
|
||||||
neighbor = HaveNeighbor(Cardinals.S, ref fix);
|
neighbor = HaveNeighbor(Cardinals.S, ref fix);
|
||||||
|
}
|
||||||
else if (m_scene.TestBorderCross(pos2, Cardinals.N))
|
else if (m_scene.TestBorderCross(pos2, Cardinals.N))
|
||||||
|
{
|
||||||
|
needsTransit = true;
|
||||||
neighbor = HaveNeighbor(Cardinals.N, ref fix);
|
neighbor = HaveNeighbor(Cardinals.N, ref fix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Makes sure avatar does not end up outside region
|
// Makes sure avatar does not end up outside region
|
||||||
if (neighbor < 0)
|
if (neighbor <= 0)
|
||||||
AbsolutePosition = new Vector3(
|
{
|
||||||
AbsolutePosition.X + 3*fix[0],
|
if (!needsTransit)
|
||||||
AbsolutePosition.Y + 3*fix[1],
|
{
|
||||||
AbsolutePosition.Z);
|
if (m_requestedSitTargetUUID == UUID.Zero)
|
||||||
|
{
|
||||||
|
Vector3 pos = AbsolutePosition;
|
||||||
|
if (AbsolutePosition.X < 0)
|
||||||
|
pos.X += Velocity.X;
|
||||||
|
else if (AbsolutePosition.X > Constants.RegionSize)
|
||||||
|
pos.X -= Velocity.X;
|
||||||
|
if (AbsolutePosition.Y < 0)
|
||||||
|
pos.Y += Velocity.Y;
|
||||||
|
else if (AbsolutePosition.Y > Constants.RegionSize)
|
||||||
|
pos.Y -= Velocity.Y;
|
||||||
|
AbsolutePosition = pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (neighbor > 0)
|
else if (neighbor > 0)
|
||||||
CrossToNewRegion();
|
CrossToNewRegion();
|
||||||
}
|
}
|
||||||
|
@ -3400,7 +3472,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate;
|
m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate;
|
||||||
m_physicsActor.OnOutOfBounds += OutOfBoundsCall; // Called for PhysicsActors when there's something wrong
|
m_physicsActor.OnOutOfBounds += OutOfBoundsCall; // Called for PhysicsActors when there's something wrong
|
||||||
m_physicsActor.SubscribeEvents(500);
|
m_physicsActor.SubscribeEvents(500);
|
||||||
m_physicsActor.LocalID = LocalId;
|
m_physicsActor.LocalID = LocalId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OutOfBoundsCall(Vector3 pos)
|
private void OutOfBoundsCall(Vector3 pos)
|
||||||
|
@ -3503,7 +3575,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
if (m_health <= 0)
|
if (m_health <= 0)
|
||||||
m_scene.EventManager.TriggerAvatarKill(killerObj, this);
|
m_scene.EventManager.TriggerAvatarKill(killerObj, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHealthWithUpdate(float health)
|
public void setHealthWithUpdate(float health)
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
|
||||||
namespace OpenSim.Region.Framework.Scenes
|
namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
|
@ -35,29 +36,21 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public Vector3 Scale = Vector3.Zero;
|
public Vector3 Scale = Vector3.Zero;
|
||||||
public Quaternion Rotation = Quaternion.Identity;
|
public Quaternion Rotation = Quaternion.Identity;
|
||||||
|
|
||||||
public UndoState(Vector3 pos, Quaternion rot, Vector3 scale)
|
|
||||||
{
|
|
||||||
Position = pos;
|
|
||||||
Rotation = rot;
|
|
||||||
Scale = scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UndoState(SceneObjectPart part)
|
public UndoState(SceneObjectPart part)
|
||||||
{
|
{
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
if (part.ParentID == 0)
|
if (part.ParentID == 0)
|
||||||
{
|
{
|
||||||
Position = part.AbsolutePosition;
|
Position = part.ParentGroup.AbsolutePosition;
|
||||||
Rotation = part.RotationOffset;
|
Rotation = part.RotationOffset;
|
||||||
|
Scale = part.Shape.Scale;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Position = part.OffsetPosition;
|
Position = part.OffsetPosition;
|
||||||
Rotation = part.RotationOffset;
|
Rotation = part.RotationOffset;
|
||||||
Scale = part.Shape.Scale;
|
Scale = part.Shape.Scale;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,7 +61,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (part.ParentID == 0)
|
if (part.ParentID == 0)
|
||||||
{
|
{
|
||||||
if (Position == part.AbsolutePosition && Rotation == part.RotationOffset)
|
if (Position == part.ParentGroup.AbsolutePosition && Rotation == part.ParentGroup.Rotation)
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
|
@ -93,24 +86,78 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (part.ParentID == 0)
|
if (part.ParentID == 0)
|
||||||
{
|
{
|
||||||
part.ParentGroup.AbsolutePosition = Position;
|
if (Position != Vector3.Zero)
|
||||||
part.UpdateRotation(Rotation);
|
part.ParentGroup.AbsolutePosition = Position;
|
||||||
|
part.RotationOffset = Rotation;
|
||||||
|
if (Scale != Vector3.Zero)
|
||||||
|
part.Resize(Scale);
|
||||||
part.ParentGroup.ScheduleGroupForTerseUpdate();
|
part.ParentGroup.ScheduleGroupForTerseUpdate();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
part.OffsetPosition = Position;
|
if (Position != Vector3.Zero)
|
||||||
|
part.OffsetPosition = Position;
|
||||||
part.UpdateRotation(Rotation);
|
part.UpdateRotation(Rotation);
|
||||||
part.Resize(Scale);
|
if (Scale != Vector3.Zero)
|
||||||
|
part.Resize(Scale); part.ScheduleTerseUpdate();
|
||||||
|
}
|
||||||
|
part.Undoing = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void PlayfwdState(SceneObjectPart part)
|
||||||
|
{
|
||||||
|
if (part != null)
|
||||||
|
{
|
||||||
|
part.Undoing = true;
|
||||||
|
|
||||||
|
if (part.ParentID == 0)
|
||||||
|
{
|
||||||
|
if (Position != Vector3.Zero)
|
||||||
|
part.ParentGroup.AbsolutePosition = Position;
|
||||||
|
if (Rotation != Quaternion.Identity)
|
||||||
|
part.UpdateRotation(Rotation);
|
||||||
|
if (Scale != Vector3.Zero)
|
||||||
|
part.Resize(Scale);
|
||||||
|
part.ParentGroup.ScheduleGroupForTerseUpdate();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Position != Vector3.Zero)
|
||||||
|
part.OffsetPosition = Position;
|
||||||
|
if (Rotation != Quaternion.Identity)
|
||||||
|
part.UpdateRotation(Rotation);
|
||||||
|
if (Scale != Vector3.Zero)
|
||||||
|
part.Resize(Scale);
|
||||||
part.ScheduleTerseUpdate();
|
part.ScheduleTerseUpdate();
|
||||||
}
|
}
|
||||||
part.Undoing = false;
|
part.Undoing = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
public class LandUndoState
|
||||||
|
{
|
||||||
|
public ITerrainModule m_terrainModule;
|
||||||
|
public ITerrainChannel m_terrainChannel;
|
||||||
|
|
||||||
public UndoState()
|
public LandUndoState(ITerrainModule terrainModule, ITerrainChannel terrainChannel)
|
||||||
{
|
{
|
||||||
|
m_terrainModule = terrainModule;
|
||||||
|
m_terrainChannel = terrainChannel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Compare(ITerrainChannel terrainChannel)
|
||||||
|
{
|
||||||
|
if (m_terrainChannel != terrainChannel)
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PlaybackState()
|
||||||
|
{
|
||||||
|
m_terrainModule.UndoTerrain(m_terrainChannel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -774,6 +774,8 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
public event UUIDNameRequest OnTeleportHomeRequest;
|
public event UUIDNameRequest OnTeleportHomeRequest;
|
||||||
public event ScriptAnswer OnScriptAnswer;
|
public event ScriptAnswer OnScriptAnswer;
|
||||||
public event AgentSit OnUndo;
|
public event AgentSit OnUndo;
|
||||||
|
public event AgentSit OnRedo;
|
||||||
|
public event LandUndo OnLandUndo;
|
||||||
public event ForceReleaseControls OnForceReleaseControls;
|
public event ForceReleaseControls OnForceReleaseControls;
|
||||||
public event GodLandStatRequest OnLandStatRequest;
|
public event GodLandStatRequest OnLandStatRequest;
|
||||||
public event DetailedEstateDataRequest OnDetailedEstateDataRequest;
|
public event DetailedEstateDataRequest OnDetailedEstateDataRequest;
|
||||||
|
|
|
@ -50,7 +50,6 @@ using OpenSim.Region.Framework.Scenes;
|
||||||
using Caps = OpenSim.Framework.Capabilities.Caps;
|
using Caps = OpenSim.Framework.Capabilities.Caps;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
|
||||||
namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
{
|
{
|
||||||
public class FreeSwitchVoiceModule : IRegionModule, IVoiceModule
|
public class FreeSwitchVoiceModule : IRegionModule, IVoiceModule
|
||||||
|
@ -76,7 +75,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
// SLVoice client will do a GET on this prefix
|
// SLVoice client will do a GET on this prefix
|
||||||
private static string m_freeSwitchAPIPrefix;
|
private static string m_freeSwitchAPIPrefix;
|
||||||
|
|
||||||
// We need to return some information to SLVoice
|
// We need to return some information to SLVoice
|
||||||
// figured those out via curl
|
// figured those out via curl
|
||||||
// http://vd1.vivox.com/api2/viv_get_prelogin.php
|
// http://vd1.vivox.com/api2/viv_get_prelogin.php
|
||||||
//
|
//
|
||||||
|
@ -102,9 +101,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
|
|
||||||
private readonly Dictionary<string, string> m_UUIDName = new Dictionary<string, string>();
|
private readonly Dictionary<string, string> m_UUIDName = new Dictionary<string, string>();
|
||||||
private Dictionary<string, string> m_ParcelAddress = new Dictionary<string, string>();
|
private Dictionary<string, string> m_ParcelAddress = new Dictionary<string, string>();
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
|
|
||||||
private IConfig m_config;
|
private IConfig m_config;
|
||||||
|
|
||||||
|
@ -136,9 +135,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
m_freeSwitchServerUser = m_config.GetString("freeswitch_server_user", String.Empty);
|
m_freeSwitchServerUser = m_config.GetString("freeswitch_server_user", String.Empty);
|
||||||
m_freeSwitchServerPass = m_config.GetString("freeswitch_server_pass", String.Empty);
|
m_freeSwitchServerPass = m_config.GetString("freeswitch_server_pass", String.Empty);
|
||||||
m_freeSwitchAPIPrefix = m_config.GetString("freeswitch_api_prefix", String.Empty);
|
m_freeSwitchAPIPrefix = m_config.GetString("freeswitch_api_prefix", String.Empty);
|
||||||
|
|
||||||
// XXX: get IP address of HTTP server. (This can be this OpenSim server or another, or could be a dedicated grid service or may live on the freeswitch server)
|
// XXX: get IP address of HTTP server. (This can be this OpenSim server or another, or could be a dedicated grid service or may live on the freeswitch server)
|
||||||
|
|
||||||
string serviceIP = m_config.GetString("freeswitch_service_server", String.Empty);
|
string serviceIP = m_config.GetString("freeswitch_service_server", String.Empty);
|
||||||
int servicePort = m_config.GetInt("freeswitch_service_port", 80);
|
int servicePort = m_config.GetInt("freeswitch_service_port", 80);
|
||||||
IPAddress serviceIPAddress = IPAddress.Parse(serviceIP);
|
IPAddress serviceIPAddress = IPAddress.Parse(serviceIP);
|
||||||
|
@ -156,7 +155,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
// m_freeSwitchSubscribeRetry = m_config.GetInt("freeswitch_subscribe_retry", 120);
|
// m_freeSwitchSubscribeRetry = m_config.GetInt("freeswitch_subscribe_retry", 120);
|
||||||
m_freeSwitchUrlResetPassword = m_config.GetString("freeswitch_password_reset_url", String.Empty);
|
m_freeSwitchUrlResetPassword = m_config.GetString("freeswitch_password_reset_url", String.Empty);
|
||||||
m_freeSwitchContext = m_config.GetString("freeswitch_context", "default");
|
m_freeSwitchContext = m_config.GetString("freeswitch_context", "default");
|
||||||
|
|
||||||
if (String.IsNullOrEmpty(m_freeSwitchServerUser) ||
|
if (String.IsNullOrEmpty(m_freeSwitchServerUser) ||
|
||||||
String.IsNullOrEmpty(m_freeSwitchServerPass) ||
|
String.IsNullOrEmpty(m_freeSwitchServerPass) ||
|
||||||
String.IsNullOrEmpty(m_freeSwitchRealm) ||
|
String.IsNullOrEmpty(m_freeSwitchRealm) ||
|
||||||
|
@ -182,9 +181,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
{
|
{
|
||||||
MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix),
|
MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix),
|
||||||
FreeSwitchSLVoiceGetPreloginHTTPHandler);
|
FreeSwitchSLVoiceGetPreloginHTTPHandler);
|
||||||
|
|
||||||
// RestStreamHandler h = new
|
// RestStreamHandler h = new
|
||||||
// RestStreamHandler("GET",
|
// RestStreamHandler("GET",
|
||||||
// String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceGetPreloginHTTPHandler);
|
// String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceGetPreloginHTTPHandler);
|
||||||
// MainServer.Instance.AddStreamHandler(h);
|
// MainServer.Instance.AddStreamHandler(h);
|
||||||
|
|
||||||
|
@ -202,13 +201,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_buddy.php", m_freeSwitchAPIPrefix),
|
MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_buddy.php", m_freeSwitchAPIPrefix),
|
||||||
FreeSwitchSLVoiceBuddyHTTPHandler);
|
FreeSwitchSLVoiceBuddyHTTPHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_log.InfoFormat("[FreeSwitchVoice] using FreeSwitch server {0}", m_freeSwitchRealm);
|
m_log.InfoFormat("[FreeSwitchVoice] using FreeSwitch server {0}", m_freeSwitchRealm);
|
||||||
|
|
||||||
m_FreeSwitchDirectory = new FreeSwitchDirectory();
|
m_FreeSwitchDirectory = new FreeSwitchDirectory();
|
||||||
m_FreeSwitchDialplan = new FreeSwitchDialplan();
|
m_FreeSwitchDialplan = new FreeSwitchDialplan();
|
||||||
|
|
||||||
|
@ -225,7 +220,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_pluginEnabled)
|
if (m_pluginEnabled)
|
||||||
{
|
{
|
||||||
// we need to capture scene in an anonymous method
|
// we need to capture scene in an anonymous method
|
||||||
// here as we need it later in the callbacks
|
// here as we need it later in the callbacks
|
||||||
|
@ -233,8 +228,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
{
|
{
|
||||||
OnRegisterCaps(scene, agentID, caps);
|
OnRegisterCaps(scene, agentID, caps);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -254,16 +247,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
m_log.Error("[FreeSwitchVoice]: Certificate validation handler change not supported. You may get ssl certificate validation errors teleporting from your region to some SSL regions.");
|
m_log.Error("[FreeSwitchVoice]: Certificate validation handler change not supported. You may get ssl certificate validation errors teleporting from your region to some SSL regions.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostInitialise()
|
public void PostInitialise()
|
||||||
{
|
{
|
||||||
if (m_pluginEnabled)
|
if (m_pluginEnabled)
|
||||||
{
|
{
|
||||||
m_log.Info("[FreeSwitchVoice] registering IVoiceModule with the scene");
|
m_log.Info("[FreeSwitchVoice] registering IVoiceModule with the scene");
|
||||||
|
|
||||||
// register the voice interface for this module, so the script engine can call us
|
// register the voice interface for this module, so the script engine can call us
|
||||||
m_scene.RegisterModuleInterface<IVoiceModule>(this);
|
m_scene.RegisterModuleInterface<IVoiceModule>(this);
|
||||||
}
|
}
|
||||||
|
@ -282,15 +274,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
{
|
{
|
||||||
get { return true; }
|
get { return true; }
|
||||||
}
|
}
|
||||||
|
|
||||||
// <summary>
|
// <summary>
|
||||||
// implementation of IVoiceModule, called by osSetParcelSIPAddress script function
|
// implementation of IVoiceModule, called by osSetParcelSIPAddress script function
|
||||||
// </summary>
|
// </summary>
|
||||||
public void setLandSIPAddress(string SIPAddress,UUID GlobalID)
|
public void setLandSIPAddress(string SIPAddress,UUID GlobalID)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[FreeSwitchVoice]: setLandSIPAddress parcel id {0}: setting sip address {1}",
|
m_log.DebugFormat("[FreeSwitchVoice]: setLandSIPAddress parcel id {0}: setting sip address {1}",
|
||||||
GlobalID, SIPAddress);
|
GlobalID, SIPAddress);
|
||||||
|
|
||||||
lock (m_ParcelAddress)
|
lock (m_ParcelAddress)
|
||||||
{
|
{
|
||||||
if (m_ParcelAddress.ContainsKey(GlobalID.ToString()))
|
if (m_ParcelAddress.ContainsKey(GlobalID.ToString()))
|
||||||
|
@ -303,18 +295,18 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// <summary>
|
// <summary>
|
||||||
// OnRegisterCaps is invoked via the scene.EventManager
|
// OnRegisterCaps is invoked via the scene.EventManager
|
||||||
// everytime OpenSim hands out capabilities to a client
|
// everytime OpenSim hands out capabilities to a client
|
||||||
// (login, region crossing). We contribute two capabilities to
|
// (login, region crossing). We contribute two capabilities to
|
||||||
// the set of capabilities handed back to the client:
|
// the set of capabilities handed back to the client:
|
||||||
// ProvisionVoiceAccountRequest and ParcelVoiceInfoRequest.
|
// ProvisionVoiceAccountRequest and ParcelVoiceInfoRequest.
|
||||||
//
|
//
|
||||||
// ProvisionVoiceAccountRequest allows the client to obtain
|
// ProvisionVoiceAccountRequest allows the client to obtain
|
||||||
// the voice account credentials for the avatar it is
|
// the voice account credentials for the avatar it is
|
||||||
// controlling (e.g., user name, password, etc).
|
// controlling (e.g., user name, password, etc).
|
||||||
//
|
//
|
||||||
// ParcelVoiceInfoRequest is invoked whenever the client
|
// ParcelVoiceInfoRequest is invoked whenever the client
|
||||||
// changes from one region or parcel to another.
|
// changes from one region or parcel to another.
|
||||||
//
|
//
|
||||||
|
@ -371,7 +363,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
{
|
{
|
||||||
System.Threading.Thread.Sleep(2000);
|
System.Threading.Thread.Sleep(2000);
|
||||||
avatar = scene.GetScenePresence(agentID);
|
avatar = scene.GetScenePresence(agentID);
|
||||||
|
|
||||||
if (avatar == null)
|
if (avatar == null)
|
||||||
return "<llsd>undef</llsd>";
|
return "<llsd>undef</llsd>";
|
||||||
}
|
}
|
||||||
|
@ -407,8 +399,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
// new LLSDVoiceAccountResponse(agentname, password, m_freeSwitchRealm, "http://etsvc02.hursley.ibm.com/api");
|
// new LLSDVoiceAccountResponse(agentname, password, m_freeSwitchRealm, "http://etsvc02.hursley.ibm.com/api");
|
||||||
LLSDVoiceAccountResponse voiceAccountResponse =
|
LLSDVoiceAccountResponse voiceAccountResponse =
|
||||||
new LLSDVoiceAccountResponse(agentname, password, m_freeSwitchRealm,
|
new LLSDVoiceAccountResponse(agentname, password, m_freeSwitchRealm,
|
||||||
String.Format("http://{0}:{1}{2}/", m_openSimWellKnownHTTPAddress,
|
String.Format("http://{0}:{1}{2}/", m_openSimWellKnownHTTPAddress,
|
||||||
m_freeSwitchServicePort, m_freeSwitchAPIPrefix));
|
m_freeSwitchServicePort, m_freeSwitchAPIPrefix));
|
||||||
|
|
||||||
string r = LLSDHelpers.SerialiseLLSDReply(voiceAccountResponse);
|
string r = LLSDHelpers.SerialiseLLSDReply(voiceAccountResponse);
|
||||||
|
|
||||||
|
@ -442,7 +434,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
string avatarName = avatar.Name;
|
string avatarName = avatar.Name;
|
||||||
|
|
||||||
// - check whether we have a region channel in our cache
|
// - check whether we have a region channel in our cache
|
||||||
// - if not:
|
// - if not:
|
||||||
// create it and cache it
|
// create it and cache it
|
||||||
// - send it to the client
|
// - send it to the client
|
||||||
// - send channel_uri: as "sip:regionID@m_sipDomain"
|
// - send channel_uri: as "sip:regionID@m_sipDomain"
|
||||||
|
@ -451,12 +443,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
LLSDParcelVoiceInfoResponse parcelVoiceInfo;
|
LLSDParcelVoiceInfoResponse parcelVoiceInfo;
|
||||||
string channelUri;
|
string channelUri;
|
||||||
|
|
||||||
if (null == scene.LandChannel)
|
if (null == scene.LandChannel)
|
||||||
throw new Exception(String.Format("region \"{0}\": avatar \"{1}\": land data not yet available",
|
throw new Exception(String.Format("region \"{0}\": avatar \"{1}\": land data not yet available",
|
||||||
scene.RegionInfo.RegionName, avatarName));
|
scene.RegionInfo.RegionName, avatarName));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// get channel_uri: check first whether estate
|
// get channel_uri: check first whether estate
|
||||||
// settings allow voice, then whether parcel allows
|
// settings allow voice, then whether parcel allows
|
||||||
// voice, if all do retrieve or obtain the parcel
|
// voice, if all do retrieve or obtain the parcel
|
||||||
|
@ -493,22 +483,21 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
parcelVoiceInfo = new LLSDParcelVoiceInfoResponse(scene.RegionInfo.RegionName, land.LocalID, creds);
|
parcelVoiceInfo = new LLSDParcelVoiceInfoResponse(scene.RegionInfo.RegionName, land.LocalID, creds);
|
||||||
string r = LLSDHelpers.SerialiseLLSDReply(parcelVoiceInfo);
|
string r = LLSDHelpers.SerialiseLLSDReply(parcelVoiceInfo);
|
||||||
|
|
||||||
m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": Parcel \"{1}\" ({2}): avatar \"{3}\": {4}",
|
m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": Parcel \"{1}\" ({2}): avatar \"{3}\": {4}",
|
||||||
scene.RegionInfo.RegionName, land.Name, land.LocalID, avatarName, r);
|
scene.RegionInfo.RegionName, land.Name, land.LocalID, avatarName, r);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": avatar \"{1}\": {2}, retry later",
|
m_log.ErrorFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": avatar \"{1}\": {2}, retry later",
|
||||||
scene.RegionInfo.RegionName, avatarName, e.Message);
|
scene.RegionInfo.RegionName, avatarName, e.Message);
|
||||||
m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": avatar \"{1}\": {2} failed",
|
m_log.DebugFormat("[FreeSwitchVoice][PARCELVOICE]: region \"{0}\": avatar \"{1}\": {2} failed",
|
||||||
scene.RegionInfo.RegionName, avatarName, e.ToString());
|
scene.RegionInfo.RegionName, avatarName, e.ToString());
|
||||||
|
|
||||||
return "<llsd>undef</llsd>";
|
return "<llsd>undef</llsd>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Callback for a client request for ChatSessionRequest
|
/// Callback for a client request for ChatSessionRequest
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -550,7 +539,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
string fwdresponsestr = "";
|
string fwdresponsestr = "";
|
||||||
int fwdresponsecode = 200;
|
int fwdresponsecode = 200;
|
||||||
string fwdresponsecontenttype = "text/xml";
|
string fwdresponsecontenttype = "text/xml";
|
||||||
|
|
||||||
|
|
||||||
HttpWebRequest forwardreq = (HttpWebRequest)WebRequest.Create(forwardaddress);
|
HttpWebRequest forwardreq = (HttpWebRequest)WebRequest.Create(forwardaddress);
|
||||||
forwardreq.Method = method;
|
forwardreq.Method = method;
|
||||||
|
@ -577,7 +565,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
response["content_type"] = fwdresponsecontenttype;
|
response["content_type"] = fwdresponsecontenttype;
|
||||||
response["str_response_string"] = fwdresponsestr;
|
response["str_response_string"] = fwdresponsestr;
|
||||||
response["int_response_code"] = fwdresponsecode;
|
response["int_response_code"] = fwdresponsecode;
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -585,11 +573,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
public Hashtable FreeSwitchSLVoiceGetPreloginHTTPHandler(Hashtable request)
|
public Hashtable FreeSwitchSLVoiceGetPreloginHTTPHandler(Hashtable request)
|
||||||
{
|
{
|
||||||
m_log.Debug("[FreeSwitchVoice] FreeSwitchSLVoiceGetPreloginHTTPHandler called");
|
m_log.Debug("[FreeSwitchVoice] FreeSwitchSLVoiceGetPreloginHTTPHandler called");
|
||||||
|
|
||||||
Hashtable response = new Hashtable();
|
Hashtable response = new Hashtable();
|
||||||
response["content_type"] = "text/xml";
|
response["content_type"] = "text/xml";
|
||||||
response["keepalive"] = false;
|
response["keepalive"] = false;
|
||||||
|
|
||||||
response["str_response_string"] = String.Format(
|
response["str_response_string"] = String.Format(
|
||||||
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
|
||||||
"<VCConfiguration>\r\n"+
|
"<VCConfiguration>\r\n"+
|
||||||
|
@ -607,9 +595,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
"</VCConfiguration>",
|
"</VCConfiguration>",
|
||||||
m_freeSwitchRealm, m_freeSwitchSIPProxy, m_freeSwitchAttemptUseSTUN,
|
m_freeSwitchRealm, m_freeSwitchSIPProxy, m_freeSwitchAttemptUseSTUN,
|
||||||
m_freeSwitchEchoServer, m_freeSwitchEchoPort,
|
m_freeSwitchEchoServer, m_freeSwitchEchoPort,
|
||||||
m_freeSwitchDefaultWellKnownIP, m_freeSwitchDefaultTimeout,
|
m_freeSwitchDefaultWellKnownIP, m_freeSwitchDefaultTimeout,
|
||||||
m_freeSwitchUrlResetPassword, "");
|
m_freeSwitchUrlResetPassword, "");
|
||||||
|
|
||||||
response["int_response_code"] = 200;
|
response["int_response_code"] = 200;
|
||||||
|
|
||||||
m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchSLVoiceGetPreloginHTTPHandler return {0}",response["str_response_string"]);
|
m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchSLVoiceGetPreloginHTTPHandler return {0}",response["str_response_string"]);
|
||||||
|
@ -624,7 +612,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
response["content-type"] = "text/xml";
|
response["content-type"] = "text/xml";
|
||||||
|
|
||||||
Hashtable requestBody = parseRequestBody((string)request["body"]);
|
Hashtable requestBody = parseRequestBody((string)request["body"]);
|
||||||
|
|
||||||
if (!requestBody.ContainsKey("auth_token"))
|
if (!requestBody.ContainsKey("auth_token"))
|
||||||
return response;
|
return response;
|
||||||
|
|
||||||
|
@ -632,7 +620,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
//string[] auth_tokenvals = auth_token.Split(':');
|
//string[] auth_tokenvals = auth_token.Split(':');
|
||||||
//string username = auth_tokenvals[0];
|
//string username = auth_tokenvals[0];
|
||||||
int strcount = 0;
|
int strcount = 0;
|
||||||
|
|
||||||
string[] ids = new string[strcount];
|
string[] ids = new string[strcount];
|
||||||
|
|
||||||
int iter = -1;
|
int iter = -1;
|
||||||
|
@ -648,7 +636,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
}
|
}
|
||||||
StringBuilder resp = new StringBuilder();
|
StringBuilder resp = new StringBuilder();
|
||||||
resp.Append("<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?><response xmlns=\"http://www.vivox.com\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation= \"/xsd/buddy_list.xsd\">");
|
resp.Append("<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?><response xmlns=\"http://www.vivox.com\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation= \"/xsd/buddy_list.xsd\">");
|
||||||
|
|
||||||
resp.Append(string.Format(@"<level0>
|
resp.Append(string.Format(@"<level0>
|
||||||
<status>OK</status>
|
<status>OK</status>
|
||||||
<cookie_name>lib_session</cookie_name>
|
<cookie_name>lib_session</cookie_name>
|
||||||
|
@ -678,7 +666,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
<b2g_group_id></b2g_group_id>
|
<b2g_group_id></b2g_group_id>
|
||||||
</level3>", ids[i],i,m_freeSwitchRealm,dt));
|
</level3>", ids[i],i,m_freeSwitchRealm,dt));
|
||||||
}
|
}
|
||||||
|
|
||||||
resp.Append("</buddies><groups></groups></body></level0></response>");
|
resp.Append("</buddies><groups></groups></body></level0></response>");
|
||||||
|
|
||||||
response["str_response_string"] = resp.ToString();
|
response["str_response_string"] = resp.ToString();
|
||||||
|
@ -694,7 +682,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
string requestbody = (string)request["body"];
|
string requestbody = (string)request["body"];
|
||||||
string uri = (string)request["uri"];
|
string uri = (string)request["uri"];
|
||||||
string contenttype = (string)request["content-type"];
|
string contenttype = (string)request["content-type"];
|
||||||
|
|
||||||
Hashtable requestBody = parseRequestBody((string)request["body"]);
|
Hashtable requestBody = parseRequestBody((string)request["body"]);
|
||||||
|
|
||||||
//string pwd = (string) requestBody["pwd"];
|
//string pwd = (string) requestBody["pwd"];
|
||||||
|
@ -712,7 +700,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
pos++;
|
pos++;
|
||||||
if (s == userid)
|
if (s == userid)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -735,7 +722,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
</body>
|
</body>
|
||||||
</level0>
|
</level0>
|
||||||
</response>", userid, pos, avatarName);
|
</response>", userid, pos, avatarName);
|
||||||
|
|
||||||
response["int_response_code"] = 200;
|
response["int_response_code"] = 200;
|
||||||
return response;
|
return response;
|
||||||
/*
|
/*
|
||||||
|
@ -752,13 +739,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
public Hashtable FreeSwitchConfigHTTPHandler(Hashtable request)
|
public Hashtable FreeSwitchConfigHTTPHandler(Hashtable request)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchConfigHTTPHandler called with {0}", (string)request["body"]);
|
m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchConfigHTTPHandler called with {0}", (string)request["body"]);
|
||||||
|
|
||||||
Hashtable response = new Hashtable();
|
Hashtable response = new Hashtable();
|
||||||
response["str_response_string"] = string.Empty;
|
response["str_response_string"] = string.Empty;
|
||||||
// all the params come as NVPs in the request body
|
// all the params come as NVPs in the request body
|
||||||
Hashtable requestBody = parseRequestBody((string) request["body"]);
|
Hashtable requestBody = parseRequestBody((string) request["body"]);
|
||||||
|
|
||||||
// is this a dialplan or directory request
|
// is this a dialplan or directory request
|
||||||
string section = (string) requestBody["section"];
|
string section = (string) requestBody["section"];
|
||||||
|
|
||||||
if (section == "directory")
|
if (section == "directory")
|
||||||
|
@ -767,40 +754,39 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
response = m_FreeSwitchDialplan.HandleDialplanRequest(m_freeSwitchContext, m_freeSwitchRealm, requestBody);
|
response = m_FreeSwitchDialplan.HandleDialplanRequest(m_freeSwitchContext, m_freeSwitchRealm, requestBody);
|
||||||
else
|
else
|
||||||
m_log.WarnFormat("[FreeSwitchVoice]: section was {0}", section);
|
m_log.WarnFormat("[FreeSwitchVoice]: section was {0}", section);
|
||||||
|
|
||||||
// XXX: re-generate dialplan:
|
// XXX: re-generate dialplan:
|
||||||
// - conf == region UUID
|
// - conf == region UUID
|
||||||
// - conf number = region port
|
// - conf number = region port
|
||||||
// -> TODO Initialise(): keep track of regions via events
|
// -> TODO Initialise(): keep track of regions via events
|
||||||
// re-generate accounts for all avatars
|
// re-generate accounts for all avatars
|
||||||
// -> TODO Initialise(): keep track of avatars via events
|
// -> TODO Initialise(): keep track of avatars via events
|
||||||
Regex normalizeEndLines = new Regex(@"\r\n", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.Multiline);
|
Regex normalizeEndLines = new Regex(@"\r\n", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.Multiline);
|
||||||
|
|
||||||
m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchConfigHTTPHandler return {0}",normalizeEndLines.Replace(((string)response["str_response_string"]), ""));
|
m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchConfigHTTPHandler return {0}",normalizeEndLines.Replace(((string)response["str_response_string"]), ""));
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Hashtable parseRequestBody(string body)
|
public Hashtable parseRequestBody(string body)
|
||||||
{
|
{
|
||||||
Hashtable bodyParams = new Hashtable();
|
Hashtable bodyParams = new Hashtable();
|
||||||
// split string
|
// split string
|
||||||
string [] nvps = body.Split(new Char [] {'&'});
|
string [] nvps = body.Split(new Char [] {'&'});
|
||||||
|
|
||||||
foreach (string s in nvps) {
|
foreach (string s in nvps)
|
||||||
|
{
|
||||||
if (s.Trim() != "")
|
if (s.Trim() != "")
|
||||||
{
|
{
|
||||||
string [] nvp = s.Split(new Char [] {'='});
|
string [] nvp = s.Split(new Char [] {'='});
|
||||||
bodyParams.Add(HttpUtility.UrlDecode(nvp[0]), HttpUtility.UrlDecode(nvp[1]));
|
bodyParams.Add(HttpUtility.UrlDecode(nvp[0]), HttpUtility.UrlDecode(nvp[1]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return bodyParams;
|
return bodyParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string ChannelUri(Scene scene, LandData land)
|
private string ChannelUri(Scene scene, LandData land)
|
||||||
{
|
{
|
||||||
|
|
||||||
string channelUri = null;
|
string channelUri = null;
|
||||||
|
|
||||||
string landUUID;
|
string landUUID;
|
||||||
|
@ -808,12 +794,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
|
|
||||||
// Create parcel voice channel. If no parcel exists, then the voice channel ID is the same
|
// Create parcel voice channel. If no parcel exists, then the voice channel ID is the same
|
||||||
// as the directory ID. Otherwise, it reflects the parcel's ID.
|
// as the directory ID. Otherwise, it reflects the parcel's ID.
|
||||||
|
|
||||||
lock (m_ParcelAddress)
|
lock (m_ParcelAddress)
|
||||||
{
|
{
|
||||||
if (m_ParcelAddress.ContainsKey(land.GlobalID.ToString()))
|
if (m_ParcelAddress.ContainsKey(land.GlobalID.ToString()))
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[FreeSwitchVoice]: parcel id {0}: using sip address {1}",
|
m_log.DebugFormat("[FreeSwitchVoice]: parcel id {0}: using sip address {1}",
|
||||||
land.GlobalID, m_ParcelAddress[land.GlobalID.ToString()]);
|
land.GlobalID, m_ParcelAddress[land.GlobalID.ToString()]);
|
||||||
return m_ParcelAddress[land.GlobalID.ToString()];
|
return m_ParcelAddress[land.GlobalID.ToString()];
|
||||||
}
|
}
|
||||||
|
@ -823,22 +809,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
{
|
{
|
||||||
landName = String.Format("{0}:{1}", scene.RegionInfo.RegionName, land.Name);
|
landName = String.Format("{0}:{1}", scene.RegionInfo.RegionName, land.Name);
|
||||||
landUUID = land.GlobalID.ToString();
|
landUUID = land.GlobalID.ToString();
|
||||||
m_log.DebugFormat("[FreeSwitchVoice]: Region:Parcel \"{0}\": parcel id {1}: using channel name {2}",
|
m_log.DebugFormat("[FreeSwitchVoice]: Region:Parcel \"{0}\": parcel id {1}: using channel name {2}",
|
||||||
landName, land.LocalID, landUUID);
|
landName, land.LocalID, landUUID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
landName = String.Format("{0}:{1}", scene.RegionInfo.RegionName, scene.RegionInfo.RegionName);
|
landName = String.Format("{0}:{1}", scene.RegionInfo.RegionName, scene.RegionInfo.RegionName);
|
||||||
landUUID = scene.RegionInfo.RegionID.ToString();
|
landUUID = scene.RegionInfo.RegionID.ToString();
|
||||||
m_log.DebugFormat("[FreeSwitchVoice]: Region:Parcel \"{0}\": parcel id {1}: using channel name {2}",
|
m_log.DebugFormat("[FreeSwitchVoice]: Region:Parcel \"{0}\": parcel id {1}: using channel name {2}",
|
||||||
landName, land.LocalID, landUUID);
|
landName, land.LocalID, landUUID);
|
||||||
}
|
}
|
||||||
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
|
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
|
||||||
|
|
||||||
// slvoice handles the sip address differently if it begins with confctl, hiding it from the user in the friends list. however it also disables
|
// slvoice handles the sip address differently if it begins with confctl, hiding it from the user in the friends list. however it also disables
|
||||||
// the personal speech indicators as well unless some siren14-3d codec magic happens. we dont have siren143d so we'll settle for the personal speech indicator.
|
// the personal speech indicators as well unless some siren14-3d codec magic happens. we dont have siren143d so we'll settle for the personal speech indicator.
|
||||||
channelUri = String.Format("sip:conf-{0}@{1}", "x" + Convert.ToBase64String(encoding.GetBytes(landUUID)), m_freeSwitchRealm);
|
channelUri = String.Format("sip:conf-{0}@{1}", "x" + Convert.ToBase64String(encoding.GetBytes(landUUID)), m_freeSwitchRealm);
|
||||||
|
|
||||||
lock (m_ParcelAddress)
|
lock (m_ParcelAddress)
|
||||||
{
|
{
|
||||||
if (!m_ParcelAddress.ContainsKey(land.GlobalID.ToString()))
|
if (!m_ParcelAddress.ContainsKey(land.GlobalID.ToString()))
|
||||||
|
@ -849,14 +835,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
|
||||||
|
|
||||||
return channelUri;
|
return channelUri;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool CustomCertificateValidation(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
|
private static bool CustomCertificateValidation(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
|
||||||
{
|
{
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MonoCert : ICertificatePolicy
|
public class MonoCert : ICertificatePolicy
|
||||||
{
|
{
|
||||||
#region ICertificatePolicy Members
|
#region ICertificatePolicy Members
|
||||||
|
|
|
@ -34,6 +34,9 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
{
|
{
|
||||||
public interface IAvatar : IEntity
|
public interface IAvatar : IEntity
|
||||||
{
|
{
|
||||||
|
|
||||||
|
bool IsChildAgent { get; }
|
||||||
|
|
||||||
//// <value>
|
//// <value>
|
||||||
/// Array of worn attachments, empty but not null, if no attachments are worn
|
/// Array of worn attachments, empty but not null, if no attachments are worn
|
||||||
/// </value>
|
/// </value>
|
||||||
|
|
|
@ -767,7 +767,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
if (!CanEdit())
|
if (!CanEdit())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
GetSOP().SendSound(asset.ToString(), volume, true, 0);
|
GetSOP().SendSound(asset.ToString(), volume, true, 0, 0, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -70,6 +70,11 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
set { GetSP().TeleportWithMomentum(value); }
|
set { GetSP().TeleportWithMomentum(value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsChildAgent
|
||||||
|
{
|
||||||
|
get { return GetSP().IsChildAgent; }
|
||||||
|
}
|
||||||
|
|
||||||
#region IAvatar implementation
|
#region IAvatar implementation
|
||||||
public IAvatarAttachment[] Attachments
|
public IAvatarAttachment[] Attachments
|
||||||
{
|
{
|
||||||
|
|
|
@ -231,7 +231,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
if (soundModule != null)
|
if (soundModule != null)
|
||||||
{
|
{
|
||||||
soundModule.TriggerSound(audio, UUID.Zero, UUID.Zero, UUID.Zero, volume, position,
|
soundModule.TriggerSound(audio, UUID.Zero, UUID.Zero, UUID.Zero, volume, position,
|
||||||
m_internalScene.RegionInfo.RegionHandle);
|
m_internalScene.RegionInfo.RegionHandle, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,7 +241,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
if (soundModule != null)
|
if (soundModule != null)
|
||||||
{
|
{
|
||||||
soundModule.TriggerSound(audio, UUID.Zero, UUID.Zero, UUID.Zero, 1.0, position,
|
soundModule.TriggerSound(audio, UUID.Zero, UUID.Zero, UUID.Zero, 1.0, position,
|
||||||
m_internalScene.RegionInfo.RegionHandle);
|
m_internalScene.RegionInfo.RegionHandle, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -121,19 +121,19 @@ namespace OpenSim.Region.Modules.SvnSerialiser
|
||||||
{
|
{
|
||||||
serialiser.LoadPrimsFromXml2(
|
serialiser.LoadPrimsFromXml2(
|
||||||
scene,
|
scene,
|
||||||
m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID
|
m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID
|
||||||
+ Slash.DirectorySeparatorChar + "objects.xml");
|
+ Slash.DirectorySeparatorChar + "objects.xml");
|
||||||
|
|
||||||
scene.RequestModuleInterface<ITerrainModule>().LoadFromFile(
|
scene.RequestModuleInterface<ITerrainModule>().LoadFromFile(
|
||||||
m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID
|
m_svndir + Slash.DirectorySeparatorChar + scene.RegionInfo.RegionID
|
||||||
+ Slash.DirectorySeparatorChar + "heightmap.r32");
|
+ Slash.DirectorySeparatorChar + "heightmap.r32");
|
||||||
|
|
||||||
m_log.Info("[SVNBACKUP]: Region load successful (" + scene.RegionInfo.RegionName + ").");
|
m_log.Info("[SVNBACKUP]: Region load successful (" + scene.RegionInfo.RegionName + ").");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[SVNBACKUP]: Region load of {0} failed - no serialisation module available",
|
"[SVNBACKUP]: Region load of {0} failed - no serialisation module available",
|
||||||
scene.RegionInfo.RegionName);
|
scene.RegionInfo.RegionName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -298,6 +298,8 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
public event ObjectBuy OnObjectBuy;
|
public event ObjectBuy OnObjectBuy;
|
||||||
public event BuyObjectInventory OnBuyObjectInventory;
|
public event BuyObjectInventory OnBuyObjectInventory;
|
||||||
public event AgentSit OnUndo;
|
public event AgentSit OnUndo;
|
||||||
|
public event AgentSit OnRedo;
|
||||||
|
public event LandUndo OnLandUndo;
|
||||||
|
|
||||||
public event ForceReleaseControls OnForceReleaseControls;
|
public event ForceReleaseControls OnForceReleaseControls;
|
||||||
public event GodLandStatRequest OnLandStatRequest;
|
public event GodLandStatRequest OnLandStatRequest;
|
||||||
|
|
|
@ -195,6 +195,11 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
public override void SetVolumeDetect(int param)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -372,6 +372,11 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
public override void SetVolumeDetect(int param)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -407,6 +407,11 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
public override void SetVolumeDetect(int param)
|
||||||
{
|
{
|
||||||
//TODO: GhostObject
|
//TODO: GhostObject
|
||||||
|
|
|
@ -500,6 +500,18 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
public BulletXScene(String sceneIdentifier)
|
public BulletXScene(String sceneIdentifier)
|
||||||
{
|
{
|
||||||
//identifier = sceneIdentifier;
|
//identifier = sceneIdentifier;
|
||||||
|
cDispatcher = new CollisionDispatcherLocal(this);
|
||||||
|
Vector3 worldMinDim = new Vector3((float)minXY, (float)minXY, (float)minZ);
|
||||||
|
Vector3 worldMaxDim = new Vector3((float)maxXY, (float)maxXY, (float)maxZ);
|
||||||
|
opCache = new AxisSweep3(worldMinDim, worldMaxDim, maxHandles);
|
||||||
|
sicSolver = new SequentialImpulseConstraintSolver();
|
||||||
|
|
||||||
|
lock (BulletXLock)
|
||||||
|
{
|
||||||
|
ddWorld = new DiscreteDynamicsWorld(cDispatcher, opCache, sicSolver);
|
||||||
|
ddWorld.Gravity = new Vector3(0, 0, -gravity);
|
||||||
|
}
|
||||||
|
//this._heightmap = new float[65536];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float Gravity
|
public static float Gravity
|
||||||
|
@ -582,12 +594,12 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
pos.Y = position.Y;
|
pos.Y = position.Y;
|
||||||
pos.Z = position.Z + 20;
|
pos.Z = position.Z + 20;
|
||||||
BulletXCharacter newAv = null;
|
BulletXCharacter newAv = null;
|
||||||
newAv.Flying = isFlying;
|
|
||||||
lock (BulletXLock)
|
lock (BulletXLock)
|
||||||
{
|
{
|
||||||
newAv = new BulletXCharacter(avName, this, pos);
|
newAv = new BulletXCharacter(avName, this, pos);
|
||||||
_characters.Add(newAv.RigidBody, newAv);
|
_characters.Add(newAv.RigidBody, newAv);
|
||||||
}
|
}
|
||||||
|
newAv.Flying = isFlying;
|
||||||
return newAv;
|
return newAv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -992,9 +1004,13 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||||
|
|
||||||
public override void VehicleFlagsRemove(int flags)
|
public override void VehicleFlagsRemove(int flags)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
public override void SetVolumeDetect(int param)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -734,6 +734,10 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int flags, bool remove)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
public override void VehicleFlagsSet(int flags)
|
public override void VehicleFlagsSet(int flags)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -2416,6 +2416,14 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
m_vehicle.ProcessRotationVehicleParam((Vehicle) param, rotation);
|
m_vehicle.ProcessRotationVehicleParam((Vehicle) param, rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int flags, bool remove)
|
||||||
|
{
|
||||||
|
if (!remove)
|
||||||
|
VehicleFlagsSet(flags);
|
||||||
|
else
|
||||||
|
VehicleFlagsRemove(flags);
|
||||||
|
}
|
||||||
|
|
||||||
public override void VehicleFlagsSet(int flags)
|
public override void VehicleFlagsSet(int flags)
|
||||||
{
|
{
|
||||||
m_vehicle.ProcessFlagsVehicleSet(flags);
|
m_vehicle.ProcessFlagsVehicleSet(flags);
|
||||||
|
|
|
@ -210,6 +210,7 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
public abstract void VehicleRotationParam(int param, Quaternion rotation);
|
public abstract void VehicleRotationParam(int param, Quaternion rotation);
|
||||||
public abstract void VehicleFlagsSet(int flags);
|
public abstract void VehicleFlagsSet(int flags);
|
||||||
public abstract void VehicleFlagsRemove(int flags);
|
public abstract void VehicleFlagsRemove(int flags);
|
||||||
|
public abstract void VehicleFlags(int param, bool remove);
|
||||||
|
|
||||||
public abstract void SetVolumeDetect(int param); // Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more
|
public abstract void SetVolumeDetect(int param); // Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more
|
||||||
|
|
||||||
|
@ -364,6 +365,11 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
public override void SetVolumeDetect(int param)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,9 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
BANKING_EFFICIENCY = 38,
|
BANKING_EFFICIENCY = 38,
|
||||||
BANKING_MIX = 39,
|
BANKING_MIX = 39,
|
||||||
BANKING_TIMESCALE = 40,
|
BANKING_TIMESCALE = 40,
|
||||||
REFERENCE_FRAME = 44
|
REFERENCE_FRAME = 44,
|
||||||
|
BLOCK_EXIT = 45,
|
||||||
|
ROLL_FRAME = 46
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +109,13 @@ namespace OpenSim.Region.Physics.Manager
|
||||||
LIMIT_MOTOR_UP = 64,
|
LIMIT_MOTOR_UP = 64,
|
||||||
MOUSELOOK_STEER = 128,
|
MOUSELOOK_STEER = 128,
|
||||||
MOUSELOOK_BANK = 256,
|
MOUSELOOK_BANK = 256,
|
||||||
CAMERA_DECOUPLED = 512
|
CAMERA_DECOUPLED = 512,
|
||||||
|
NO_X = 1024,
|
||||||
|
NO_Y = 2048,
|
||||||
|
NO_Z = 4096,
|
||||||
|
LOCK_HOVER_HEIGHT = 8192,
|
||||||
|
NO_DEFLECTION = 16392,
|
||||||
|
LOCK_ROTATION = 32784
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -744,6 +744,11 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
public override void SetVolumeDetect(int param)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -72,37 +72,40 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
|
|
||||||
// Vehicle properties
|
// Vehicle properties
|
||||||
private Vehicle m_type = Vehicle.TYPE_NONE; // If a 'VEHICLE', and what kind
|
private Vehicle m_type = Vehicle.TYPE_NONE; // If a 'VEHICLE', and what kind
|
||||||
// private Quaternion m_referenceFrame = Quaternion.Identity; // Axis modifier
|
// private Quaternion m_referenceFrame = Quaternion.Identity; // Axis modifier
|
||||||
private VehicleFlag m_flags = (VehicleFlag) 0; // Boolean settings:
|
private VehicleFlag m_flags = (VehicleFlag) 0; // Boolean settings:
|
||||||
// HOVER_TERRAIN_ONLY
|
// HOVER_TERRAIN_ONLY
|
||||||
// HOVER_GLOBAL_HEIGHT
|
// HOVER_GLOBAL_HEIGHT
|
||||||
// NO_DEFLECTION_UP
|
// NO_DEFLECTION_UP
|
||||||
// HOVER_WATER_ONLY
|
// HOVER_WATER_ONLY
|
||||||
// HOVER_UP_ONLY
|
// HOVER_UP_ONLY
|
||||||
// LIMIT_MOTOR_UP
|
// LIMIT_MOTOR_UP
|
||||||
// LIMIT_ROLL_ONLY
|
// LIMIT_ROLL_ONLY
|
||||||
|
private VehicleFlag m_Hoverflags = (VehicleFlag)0;
|
||||||
|
private Vector3 m_BlockingEndPoint = Vector3.Zero;
|
||||||
|
private Quaternion m_RollreferenceFrame = Quaternion.Identity;
|
||||||
// Linear properties
|
// Linear properties
|
||||||
private Vector3 m_linearMotorDirection = Vector3.Zero; // velocity requested by LSL, decayed by time
|
private Vector3 m_linearMotorDirection = Vector3.Zero; // velocity requested by LSL, decayed by time
|
||||||
private Vector3 m_linearMotorDirectionLASTSET = Vector3.Zero; // velocity requested by LSL
|
private Vector3 m_linearMotorDirectionLASTSET = Vector3.Zero; // velocity requested by LSL
|
||||||
private Vector3 m_dir = Vector3.Zero; // velocity applied to body
|
private Vector3 m_dir = Vector3.Zero; // velocity applied to body
|
||||||
private Vector3 m_linearFrictionTimescale = Vector3.Zero;
|
private Vector3 m_linearFrictionTimescale = Vector3.Zero;
|
||||||
private float m_linearMotorDecayTimescale = 0;
|
private float m_linearMotorDecayTimescale = 0;
|
||||||
private float m_linearMotorTimescale = 0;
|
private float m_linearMotorTimescale = 0;
|
||||||
private Vector3 m_lastLinearVelocityVector = Vector3.Zero;
|
private Vector3 m_lastLinearVelocityVector = Vector3.Zero;
|
||||||
|
private d.Vector3 m_lastPositionVector = new d.Vector3();
|
||||||
// private bool m_LinearMotorSetLastFrame = false;
|
// private bool m_LinearMotorSetLastFrame = false;
|
||||||
// private Vector3 m_linearMotorOffset = Vector3.Zero;
|
// private Vector3 m_linearMotorOffset = Vector3.Zero;
|
||||||
|
|
||||||
//Angular properties
|
//Angular properties
|
||||||
private Vector3 m_angularMotorDirection = Vector3.Zero; // angular velocity requested by LSL motor
|
private Vector3 m_angularMotorDirection = Vector3.Zero; // angular velocity requested by LSL motor
|
||||||
private int m_angularMotorApply = 0; // application frame counter
|
private int m_angularMotorApply = 0; // application frame counter
|
||||||
private Vector3 m_angularMotorVelocity = Vector3.Zero; // current angular motor velocity
|
private Vector3 m_angularMotorVelocity = Vector3.Zero; // current angular motor velocity
|
||||||
private float m_angularMotorTimescale = 0; // motor angular velocity ramp up rate
|
private float m_angularMotorTimescale = 0; // motor angular velocity ramp up rate
|
||||||
private float m_angularMotorDecayTimescale = 0; // motor angular velocity decay rate
|
private float m_angularMotorDecayTimescale = 0; // motor angular velocity decay rate
|
||||||
private Vector3 m_angularFrictionTimescale = Vector3.Zero; // body angular velocity decay rate
|
private Vector3 m_angularFrictionTimescale = Vector3.Zero; // body angular velocity decay rate
|
||||||
private Vector3 m_lastAngularVelocity = Vector3.Zero; // what was last applied to body
|
private Vector3 m_lastAngularVelocity = Vector3.Zero; // what was last applied to body
|
||||||
// private Vector3 m_lastVertAttractor = Vector3.Zero; // what VA was last applied to body
|
// private Vector3 m_lastVertAttractor = Vector3.Zero; // what VA was last applied to body
|
||||||
|
|
||||||
//Deflection properties
|
//Deflection properties
|
||||||
// private float m_angularDeflectionEfficiency = 0;
|
// private float m_angularDeflectionEfficiency = 0;
|
||||||
|
@ -120,14 +123,14 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// private float m_VhoverEfficiency = 0f;
|
// private float m_VhoverEfficiency = 0f;
|
||||||
private float m_VhoverTimescale = 0f;
|
private float m_VhoverTimescale = 0f;
|
||||||
private float m_VhoverTargetHeight = -1.0f; // if <0 then no hover, else its the current target height
|
private float m_VhoverTargetHeight = -1.0f; // if <0 then no hover, else its the current target height
|
||||||
private float m_VehicleBuoyancy = 0f; //KF: m_VehicleBuoyancy is set by VEHICLE_BUOYANCY for a vehicle.
|
private float m_VehicleBuoyancy = 0f; //KF: m_VehicleBuoyancy is set by VEHICLE_BUOYANCY for a vehicle.
|
||||||
// Modifies gravity. Slider between -1 (double-gravity) and 1 (full anti-gravity)
|
// Modifies gravity. Slider between -1 (double-gravity) and 1 (full anti-gravity)
|
||||||
// KF: So far I have found no good method to combine a script-requested .Z velocity and gravity.
|
// KF: So far I have found no good method to combine a script-requested .Z velocity and gravity.
|
||||||
// Therefore only m_VehicleBuoyancy=1 (0g) will use the script-requested .Z velocity.
|
// Therefore only m_VehicleBuoyancy=1 (0g) will use the script-requested .Z velocity.
|
||||||
|
|
||||||
//Attractor properties
|
//Attractor properties
|
||||||
private float m_verticalAttractionEfficiency = 1.0f; // damped
|
private float m_verticalAttractionEfficiency = 1.0f; // damped
|
||||||
private float m_verticalAttractionTimescale = 500f; // Timescale > 300 means no vert attractor.
|
private float m_verticalAttractionTimescale = 500f; // Timescale > 300 means no vert attractor.
|
||||||
|
|
||||||
internal void ProcessFloatVehicleParam(Vehicle pParam, float pValue)
|
internal void ProcessFloatVehicleParam(Vehicle pParam, float pValue)
|
||||||
{
|
{
|
||||||
|
@ -255,6 +258,9 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
case Vehicle.LINEAR_MOTOR_OFFSET:
|
case Vehicle.LINEAR_MOTOR_OFFSET:
|
||||||
// m_linearMotorOffset = new Vector3(pValue.X, pValue.Y, pValue.Z);
|
// m_linearMotorOffset = new Vector3(pValue.X, pValue.Y, pValue.Z);
|
||||||
break;
|
break;
|
||||||
|
case Vehicle.BLOCK_EXIT:
|
||||||
|
m_BlockingEndPoint = new Vector3(pValue.X, pValue.Y, pValue.Z);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}//end ProcessVectorVehicleParam
|
}//end ProcessVectorVehicleParam
|
||||||
|
|
||||||
|
@ -265,15 +271,189 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
case Vehicle.REFERENCE_FRAME:
|
case Vehicle.REFERENCE_FRAME:
|
||||||
// m_referenceFrame = pValue;
|
// m_referenceFrame = pValue;
|
||||||
break;
|
break;
|
||||||
|
case Vehicle.ROLL_FRAME:
|
||||||
|
m_RollreferenceFrame = pValue;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}//end ProcessRotationVehicleParam
|
}//end ProcessRotationVehicleParam
|
||||||
|
|
||||||
|
internal void ProcessVehicleFlags(int pParam, bool remove)
|
||||||
|
{
|
||||||
|
if (remove)
|
||||||
|
{
|
||||||
|
if (pParam == -1)
|
||||||
|
{
|
||||||
|
m_flags = (VehicleFlag)0;
|
||||||
|
m_Hoverflags = (VehicleFlag)0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.HOVER_GLOBAL_HEIGHT) == (int)VehicleFlag.HOVER_GLOBAL_HEIGHT)
|
||||||
|
{
|
||||||
|
if ((m_Hoverflags & VehicleFlag.HOVER_GLOBAL_HEIGHT) != (VehicleFlag)0)
|
||||||
|
m_Hoverflags &= ~(VehicleFlag.HOVER_GLOBAL_HEIGHT);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.HOVER_TERRAIN_ONLY) == (int)VehicleFlag.HOVER_TERRAIN_ONLY)
|
||||||
|
{
|
||||||
|
if ((m_Hoverflags & VehicleFlag.HOVER_TERRAIN_ONLY) != (VehicleFlag)0)
|
||||||
|
m_Hoverflags &= ~(VehicleFlag.HOVER_TERRAIN_ONLY);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.HOVER_UP_ONLY) == (int)VehicleFlag.HOVER_UP_ONLY)
|
||||||
|
{
|
||||||
|
if ((m_Hoverflags & VehicleFlag.HOVER_UP_ONLY) != (VehicleFlag)0)
|
||||||
|
m_Hoverflags &= ~(VehicleFlag.HOVER_UP_ONLY);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.HOVER_WATER_ONLY) == (int)VehicleFlag.HOVER_WATER_ONLY)
|
||||||
|
{
|
||||||
|
if ((m_Hoverflags & VehicleFlag.HOVER_WATER_ONLY) != (VehicleFlag)0)
|
||||||
|
m_Hoverflags &= ~(VehicleFlag.HOVER_WATER_ONLY);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.LIMIT_MOTOR_UP) == (int)VehicleFlag.LIMIT_MOTOR_UP)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.LIMIT_MOTOR_UP) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.LIMIT_MOTOR_UP);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.LIMIT_ROLL_ONLY) == (int)VehicleFlag.LIMIT_ROLL_ONLY)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.LIMIT_ROLL_ONLY) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.LIMIT_ROLL_ONLY);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.MOUSELOOK_BANK) == (int)VehicleFlag.MOUSELOOK_BANK)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.MOUSELOOK_BANK) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.MOUSELOOK_BANK);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.MOUSELOOK_STEER) == (int)VehicleFlag.MOUSELOOK_STEER)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.MOUSELOOK_STEER) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.MOUSELOOK_STEER);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.NO_DEFLECTION_UP) == (int)VehicleFlag.NO_DEFLECTION_UP)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.NO_DEFLECTION_UP) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.NO_DEFLECTION_UP);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.CAMERA_DECOUPLED) == (int)VehicleFlag.CAMERA_DECOUPLED)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.CAMERA_DECOUPLED) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.CAMERA_DECOUPLED);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.NO_X) == (int)VehicleFlag.NO_X)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.NO_X) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.NO_X);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.NO_Y) == (int)VehicleFlag.NO_Y)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.NO_Y) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.NO_Y);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.NO_Z) == (int)VehicleFlag.NO_Z)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.NO_Z) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.NO_Z);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.LOCK_HOVER_HEIGHT) == (int)VehicleFlag.LOCK_HOVER_HEIGHT)
|
||||||
|
{
|
||||||
|
if ((m_Hoverflags & VehicleFlag.LOCK_HOVER_HEIGHT) != (VehicleFlag)0)
|
||||||
|
m_Hoverflags &= ~(VehicleFlag.LOCK_HOVER_HEIGHT);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.NO_DEFLECTION) == (int)VehicleFlag.NO_DEFLECTION)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.NO_DEFLECTION) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.NO_DEFLECTION);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.LOCK_ROTATION) == (int)VehicleFlag.LOCK_ROTATION)
|
||||||
|
{
|
||||||
|
if ((m_flags & VehicleFlag.LOCK_ROTATION) != (VehicleFlag)0)
|
||||||
|
m_flags &= ~(VehicleFlag.LOCK_ROTATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((pParam & (int)VehicleFlag.HOVER_GLOBAL_HEIGHT) == (int)VehicleFlag.HOVER_GLOBAL_HEIGHT)
|
||||||
|
{
|
||||||
|
m_Hoverflags |= (VehicleFlag.HOVER_GLOBAL_HEIGHT | m_flags);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.HOVER_TERRAIN_ONLY) == (int)VehicleFlag.HOVER_TERRAIN_ONLY)
|
||||||
|
{
|
||||||
|
m_Hoverflags |= (VehicleFlag.HOVER_TERRAIN_ONLY | m_flags);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.HOVER_UP_ONLY) == (int)VehicleFlag.HOVER_UP_ONLY)
|
||||||
|
{
|
||||||
|
m_Hoverflags |= (VehicleFlag.HOVER_UP_ONLY | m_flags);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.HOVER_WATER_ONLY) == (int)VehicleFlag.HOVER_WATER_ONLY)
|
||||||
|
{
|
||||||
|
m_Hoverflags |= (VehicleFlag.HOVER_WATER_ONLY | m_flags);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.LIMIT_MOTOR_UP) == (int)VehicleFlag.LIMIT_MOTOR_UP)
|
||||||
|
{
|
||||||
|
m_flags |= (VehicleFlag.LIMIT_MOTOR_UP | m_flags);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.MOUSELOOK_BANK) == (int)VehicleFlag.MOUSELOOK_BANK)
|
||||||
|
{
|
||||||
|
m_flags |= (VehicleFlag.MOUSELOOK_BANK | m_flags);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.MOUSELOOK_STEER) == (int)VehicleFlag.MOUSELOOK_STEER)
|
||||||
|
{
|
||||||
|
m_flags |= (VehicleFlag.MOUSELOOK_STEER | m_flags);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.NO_DEFLECTION_UP) == (int)VehicleFlag.NO_DEFLECTION_UP)
|
||||||
|
{
|
||||||
|
m_flags |= (VehicleFlag.NO_DEFLECTION_UP | m_flags);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.CAMERA_DECOUPLED) == (int)VehicleFlag.CAMERA_DECOUPLED)
|
||||||
|
{
|
||||||
|
m_flags |= (VehicleFlag.CAMERA_DECOUPLED | m_flags);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.NO_X) == (int)VehicleFlag.NO_X)
|
||||||
|
{
|
||||||
|
m_flags |= (VehicleFlag.NO_X);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.NO_Y) == (int)VehicleFlag.NO_Y)
|
||||||
|
{
|
||||||
|
m_flags |= (VehicleFlag.NO_Y);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.NO_Z) == (int)VehicleFlag.NO_Z)
|
||||||
|
{
|
||||||
|
m_flags |= (VehicleFlag.NO_Z);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.LOCK_HOVER_HEIGHT) == (int)VehicleFlag.LOCK_HOVER_HEIGHT)
|
||||||
|
{
|
||||||
|
m_Hoverflags |= (VehicleFlag.LOCK_HOVER_HEIGHT);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.NO_DEFLECTION) == (int)VehicleFlag.NO_DEFLECTION)
|
||||||
|
{
|
||||||
|
m_flags |= (VehicleFlag.NO_DEFLECTION);
|
||||||
|
}
|
||||||
|
if ((pParam & (int)VehicleFlag.LOCK_ROTATION) == (int)VehicleFlag.LOCK_ROTATION)
|
||||||
|
{
|
||||||
|
m_flags |= (VehicleFlag.LOCK_ROTATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//end ProcessVehicleFlags
|
||||||
|
|
||||||
internal void ProcessTypeChange(Vehicle pType)
|
internal void ProcessTypeChange(Vehicle pType)
|
||||||
{
|
{
|
||||||
// Set Defaults For Type
|
// Set Defaults For Type
|
||||||
m_type = pType;
|
m_type = pType;
|
||||||
switch (pType)
|
switch (pType)
|
||||||
{
|
{
|
||||||
|
case Vehicle.TYPE_NONE:
|
||||||
|
m_linearFrictionTimescale = new Vector3(0, 0, 0);
|
||||||
|
m_angularFrictionTimescale = new Vector3(0, 0, 0);
|
||||||
|
m_linearMotorDirection = Vector3.Zero;
|
||||||
|
m_linearMotorTimescale = 0;
|
||||||
|
m_linearMotorDecayTimescale = 0;
|
||||||
|
m_angularMotorDirection = Vector3.Zero;
|
||||||
|
m_angularMotorTimescale = 0;
|
||||||
|
m_angularMotorDecayTimescale = 0;
|
||||||
|
m_VhoverHeight = 0;
|
||||||
|
m_VhoverTimescale = 0;
|
||||||
|
m_VehicleBuoyancy = 0;
|
||||||
|
m_flags = (VehicleFlag)0;
|
||||||
|
break;
|
||||||
|
|
||||||
case Vehicle.TYPE_SLED:
|
case Vehicle.TYPE_SLED:
|
||||||
m_linearFrictionTimescale = new Vector3(30, 1, 1000);
|
m_linearFrictionTimescale = new Vector3(30, 1, 1000);
|
||||||
m_angularFrictionTimescale = new Vector3(1000, 1000, 1000);
|
m_angularFrictionTimescale = new Vector3(1000, 1000, 1000);
|
||||||
|
@ -295,9 +475,9 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// m_bankingMix = 1;
|
// m_bankingMix = 1;
|
||||||
// m_bankingTimescale = 10;
|
// m_bankingTimescale = 10;
|
||||||
// m_referenceFrame = Quaternion.Identity;
|
// m_referenceFrame = Quaternion.Identity;
|
||||||
m_flags &=
|
m_Hoverflags &=
|
||||||
~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY |
|
~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY |
|
||||||
VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY);
|
VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY);
|
||||||
m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_ROLL_ONLY | VehicleFlag.LIMIT_MOTOR_UP);
|
m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_ROLL_ONLY | VehicleFlag.LIMIT_MOTOR_UP);
|
||||||
break;
|
break;
|
||||||
case Vehicle.TYPE_CAR:
|
case Vehicle.TYPE_CAR:
|
||||||
|
@ -323,9 +503,10 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// m_bankingMix = 1;
|
// m_bankingMix = 1;
|
||||||
// m_bankingTimescale = 1;
|
// m_bankingTimescale = 1;
|
||||||
// m_referenceFrame = Quaternion.Identity;
|
// m_referenceFrame = Quaternion.Identity;
|
||||||
m_flags &= ~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT);
|
m_Hoverflags &= ~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT);
|
||||||
m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_ROLL_ONLY | VehicleFlag.HOVER_UP_ONLY |
|
m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_ROLL_ONLY |
|
||||||
VehicleFlag.LIMIT_MOTOR_UP);
|
VehicleFlag.LIMIT_MOTOR_UP);
|
||||||
|
m_Hoverflags |= (VehicleFlag.HOVER_UP_ONLY);
|
||||||
break;
|
break;
|
||||||
case Vehicle.TYPE_BOAT:
|
case Vehicle.TYPE_BOAT:
|
||||||
m_linearFrictionTimescale = new Vector3(10, 3, 2);
|
m_linearFrictionTimescale = new Vector3(10, 3, 2);
|
||||||
|
@ -350,10 +531,12 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// m_bankingMix = 0.8f;
|
// m_bankingMix = 0.8f;
|
||||||
// m_bankingTimescale = 1;
|
// m_bankingTimescale = 1;
|
||||||
// m_referenceFrame = Quaternion.Identity;
|
// m_referenceFrame = Quaternion.Identity;
|
||||||
m_flags &= ~(VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.LIMIT_ROLL_ONLY |
|
m_Hoverflags &= ~(VehicleFlag.HOVER_TERRAIN_ONLY |
|
||||||
VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY);
|
VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY);
|
||||||
m_flags |= (VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.HOVER_WATER_ONLY |
|
m_flags &= ~(VehicleFlag.LIMIT_ROLL_ONLY);
|
||||||
|
m_flags |= (VehicleFlag.NO_DEFLECTION_UP |
|
||||||
VehicleFlag.LIMIT_MOTOR_UP);
|
VehicleFlag.LIMIT_MOTOR_UP);
|
||||||
|
m_Hoverflags |= (VehicleFlag.HOVER_WATER_ONLY);
|
||||||
break;
|
break;
|
||||||
case Vehicle.TYPE_AIRPLANE:
|
case Vehicle.TYPE_AIRPLANE:
|
||||||
m_linearFrictionTimescale = new Vector3(200, 10, 5);
|
m_linearFrictionTimescale = new Vector3(200, 10, 5);
|
||||||
|
@ -378,8 +561,9 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// m_bankingMix = 0.7f;
|
// m_bankingMix = 0.7f;
|
||||||
// m_bankingTimescale = 2;
|
// m_bankingTimescale = 2;
|
||||||
// m_referenceFrame = Quaternion.Identity;
|
// m_referenceFrame = Quaternion.Identity;
|
||||||
m_flags &= ~(VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY |
|
m_Hoverflags &= ~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY |
|
||||||
VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY | VehicleFlag.LIMIT_MOTOR_UP);
|
VehicleFlag.HOVER_GLOBAL_HEIGHT | VehicleFlag.HOVER_UP_ONLY);
|
||||||
|
m_flags &= ~(VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_MOTOR_UP);
|
||||||
m_flags |= (VehicleFlag.LIMIT_ROLL_ONLY);
|
m_flags |= (VehicleFlag.LIMIT_ROLL_ONLY);
|
||||||
break;
|
break;
|
||||||
case Vehicle.TYPE_BALLOON:
|
case Vehicle.TYPE_BALLOON:
|
||||||
|
@ -405,9 +589,11 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// m_bankingMix = 0.7f;
|
// m_bankingMix = 0.7f;
|
||||||
// m_bankingTimescale = 5;
|
// m_bankingTimescale = 5;
|
||||||
// m_referenceFrame = Quaternion.Identity;
|
// m_referenceFrame = Quaternion.Identity;
|
||||||
m_flags &= ~(VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY |
|
m_Hoverflags &= ~(VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY |
|
||||||
VehicleFlag.HOVER_UP_ONLY | VehicleFlag.LIMIT_MOTOR_UP);
|
VehicleFlag.HOVER_UP_ONLY);
|
||||||
m_flags |= (VehicleFlag.LIMIT_ROLL_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT);
|
m_flags &= ~(VehicleFlag.NO_DEFLECTION_UP | VehicleFlag.LIMIT_MOTOR_UP);
|
||||||
|
m_flags |= (VehicleFlag.LIMIT_ROLL_ONLY);
|
||||||
|
m_Hoverflags |= (VehicleFlag.HOVER_GLOBAL_HEIGHT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -431,6 +617,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
MoveLinear(pTimestep, pParentScene);
|
MoveLinear(pTimestep, pParentScene);
|
||||||
MoveAngular(pTimestep);
|
MoveAngular(pTimestep);
|
||||||
|
LimitRotation(pTimestep);
|
||||||
}// end Step
|
}// end Step
|
||||||
|
|
||||||
private void MoveLinear(float pTimestep, OdeScene _pParentScene)
|
private void MoveLinear(float pTimestep, OdeScene _pParentScene)
|
||||||
|
@ -477,61 +664,152 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
// .Z velocity and gravity. Therefore only 0g will used script-requested
|
// .Z velocity and gravity. Therefore only 0g will used script-requested
|
||||||
// .Z velocity. >0g (m_VehicleBuoyancy < 1) will used modified gravity only.
|
// .Z velocity. >0g (m_VehicleBuoyancy < 1) will used modified gravity only.
|
||||||
Vector3 grav = Vector3.Zero;
|
Vector3 grav = Vector3.Zero;
|
||||||
if (m_VehicleBuoyancy < 1.0f)
|
// There is some gravity, make a gravity force vector
|
||||||
|
// that is applied after object velocity.
|
||||||
|
d.Mass objMass;
|
||||||
|
d.BodyGetMass(Body, out objMass);
|
||||||
|
// m_VehicleBuoyancy: -1=2g; 0=1g; 1=0g;
|
||||||
|
grav.Z = _pParentScene.gravityz * objMass.mass * (1f - m_VehicleBuoyancy);
|
||||||
|
// Preserve the current Z velocity
|
||||||
|
d.Vector3 vel_now = d.BodyGetLinearVel(Body);
|
||||||
|
m_dir.Z = vel_now.Z; // Preserve the accumulated falling velocity
|
||||||
|
|
||||||
|
d.Vector3 pos = d.BodyGetPosition(Body);
|
||||||
|
Vector3 accel = new Vector3(-(m_dir.X - m_lastLinearVelocityVector.X / 0.1f), -(m_dir.Y - m_lastLinearVelocityVector.Y / 0.1f), m_dir.Z - m_lastLinearVelocityVector.Z / 0.1f);
|
||||||
|
Vector3 posChange = new Vector3();
|
||||||
|
posChange.X = pos.X - m_lastPositionVector.X;
|
||||||
|
posChange.Y = pos.Y - m_lastPositionVector.Y;
|
||||||
|
posChange.Z = pos.Z - m_lastPositionVector.Z;
|
||||||
|
double Zchange = Math.Abs(posChange.Z);
|
||||||
|
if (m_BlockingEndPoint != Vector3.Zero)
|
||||||
{
|
{
|
||||||
// There is some gravity, make a gravity force vector
|
if (pos.X >= (m_BlockingEndPoint.X - (float)1))
|
||||||
// that is applied after object velocity.
|
{
|
||||||
d.Mass objMass;
|
pos.X -= posChange.X + 1;
|
||||||
d.BodyGetMass(Body, out objMass);
|
d.BodySetPosition(Body, pos.X, pos.Y, pos.Z);
|
||||||
// m_VehicleBuoyancy: -1=2g; 0=1g; 1=0g;
|
}
|
||||||
grav.Z = _pParentScene.gravityz * objMass.mass * (1f - m_VehicleBuoyancy);
|
if (pos.Y >= (m_BlockingEndPoint.Y - (float)1))
|
||||||
// Preserve the current Z velocity
|
{
|
||||||
d.Vector3 vel_now = d.BodyGetLinearVel(Body);
|
pos.Y -= posChange.Y + 1;
|
||||||
m_dir.Z = vel_now.Z; // Preserve the accumulated falling velocity
|
d.BodySetPosition(Body, pos.X, pos.Y, pos.Z);
|
||||||
} // else its 1.0, no gravity.
|
}
|
||||||
|
if (pos.Z >= (m_BlockingEndPoint.Z - (float)1))
|
||||||
|
{
|
||||||
|
pos.Z -= posChange.Z + 1;
|
||||||
|
d.BodySetPosition(Body, pos.X, pos.Y, pos.Z);
|
||||||
|
}
|
||||||
|
if (pos.X <= 0)
|
||||||
|
{
|
||||||
|
pos.X += posChange.X + 1;
|
||||||
|
d.BodySetPosition(Body, pos.X, pos.Y, pos.Z);
|
||||||
|
}
|
||||||
|
if (pos.Y <= 0)
|
||||||
|
{
|
||||||
|
pos.Y += posChange.Y + 1;
|
||||||
|
d.BodySetPosition(Body, pos.X, pos.Y, pos.Z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pos.Z < _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y))
|
||||||
|
{
|
||||||
|
pos.Z = _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y) + 2;
|
||||||
|
d.BodySetPosition(Body, pos.X, pos.Y, pos.Z);
|
||||||
|
}
|
||||||
|
|
||||||
// Check if hovering
|
// Check if hovering
|
||||||
if ((m_flags & (VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT)) != 0)
|
if ((m_Hoverflags & (VehicleFlag.HOVER_WATER_ONLY | VehicleFlag.HOVER_TERRAIN_ONLY | VehicleFlag.HOVER_GLOBAL_HEIGHT)) != 0)
|
||||||
{
|
{
|
||||||
// We should hover, get the target height
|
// We should hover, get the target height
|
||||||
d.Vector3 pos = d.BodyGetPosition(Body);
|
if ((m_Hoverflags & VehicleFlag.HOVER_WATER_ONLY) != 0)
|
||||||
if ((m_flags & VehicleFlag.HOVER_WATER_ONLY) == VehicleFlag.HOVER_WATER_ONLY)
|
|
||||||
{
|
{
|
||||||
m_VhoverTargetHeight = _pParentScene.GetWaterLevel() + m_VhoverHeight;
|
m_VhoverTargetHeight = _pParentScene.GetWaterLevel() + m_VhoverHeight;
|
||||||
}
|
}
|
||||||
else if ((m_flags & VehicleFlag.HOVER_TERRAIN_ONLY) == VehicleFlag.HOVER_TERRAIN_ONLY)
|
if ((m_Hoverflags & VehicleFlag.HOVER_TERRAIN_ONLY) != 0)
|
||||||
{
|
{
|
||||||
m_VhoverTargetHeight = _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y) + m_VhoverHeight;
|
m_VhoverTargetHeight = _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y) + m_VhoverHeight;
|
||||||
}
|
}
|
||||||
else if ((m_flags & VehicleFlag.HOVER_GLOBAL_HEIGHT) == VehicleFlag.HOVER_GLOBAL_HEIGHT)
|
if ((m_Hoverflags & VehicleFlag.HOVER_GLOBAL_HEIGHT) != 0)
|
||||||
{
|
{
|
||||||
m_VhoverTargetHeight = m_VhoverHeight;
|
m_VhoverTargetHeight = m_VhoverHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_flags & VehicleFlag.HOVER_UP_ONLY) == VehicleFlag.HOVER_UP_ONLY)
|
if ((m_Hoverflags & VehicleFlag.HOVER_UP_ONLY) != 0)
|
||||||
{
|
{
|
||||||
// If body is aready heigher, use its height as target height
|
// If body is aready heigher, use its height as target height
|
||||||
if (pos.Z > m_VhoverTargetHeight) m_VhoverTargetHeight = pos.Z;
|
if (pos.Z > m_VhoverTargetHeight) m_VhoverTargetHeight = pos.Z;
|
||||||
}
|
}
|
||||||
|
if ((m_Hoverflags & VehicleFlag.LOCK_HOVER_HEIGHT) != 0)
|
||||||
|
{
|
||||||
|
if ((pos.Z - m_VhoverTargetHeight) > .2 || (pos.Z - m_VhoverTargetHeight) < -.2)
|
||||||
|
{
|
||||||
|
d.BodySetPosition(Body, pos.X, pos.Y, m_VhoverTargetHeight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
float herr0 = pos.Z - m_VhoverTargetHeight;
|
||||||
|
// Replace Vertical speed with correction figure if significant
|
||||||
|
if (Math.Abs(herr0) > 0.01f)
|
||||||
|
{
|
||||||
|
m_dir.Z = -((herr0 * pTimestep * 50.0f) / m_VhoverTimescale);
|
||||||
|
//KF: m_VhoverEfficiency is not yet implemented
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_dir.Z = 0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// m_VhoverEfficiency = 0f; // 0=boucy, 1=Crit.damped
|
// m_VhoverEfficiency = 0f; // 0=boucy, 1=Crit.damped
|
||||||
// m_VhoverTimescale = 0f; // time to acheive height
|
// m_VhoverTimescale = 0f; // time to acheive height
|
||||||
// pTimestep is time since last frame,in secs
|
// pTimestep is time since last frame,in secs
|
||||||
float herr0 = pos.Z - m_VhoverTargetHeight;
|
|
||||||
// Replace Vertical speed with correction figure if significant
|
|
||||||
if (Math.Abs(herr0) > 0.01f)
|
|
||||||
{
|
|
||||||
d.Mass objMass;
|
|
||||||
d.BodyGetMass(Body, out objMass);
|
|
||||||
m_dir.Z = - ((herr0 * pTimestep * 50.0f) / m_VhoverTimescale);
|
|
||||||
//KF: m_VhoverEfficiency is not yet implemented
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_dir.Z = 0f;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((m_flags & (VehicleFlag.LIMIT_MOTOR_UP)) != 0)
|
||||||
|
{
|
||||||
|
//Start Experimental Values
|
||||||
|
if (Zchange > .3)
|
||||||
|
{
|
||||||
|
grav.Z = (float)(grav.Z * 3);
|
||||||
|
}
|
||||||
|
if (Zchange > .15)
|
||||||
|
{
|
||||||
|
grav.Z = (float)(grav.Z * 2);
|
||||||
|
}
|
||||||
|
if (Zchange > .75)
|
||||||
|
{
|
||||||
|
grav.Z = (float)(grav.Z * 1.5);
|
||||||
|
}
|
||||||
|
if (Zchange > .05)
|
||||||
|
{
|
||||||
|
grav.Z = (float)(grav.Z * 1.25);
|
||||||
|
}
|
||||||
|
if (Zchange > .025)
|
||||||
|
{
|
||||||
|
grav.Z = (float)(grav.Z * 1.125);
|
||||||
|
}
|
||||||
|
float terraintemp = _pParentScene.GetTerrainHeightAtXY(pos.X, pos.Y);
|
||||||
|
float postemp = (pos.Z - terraintemp);
|
||||||
|
if (postemp > 2.5f)
|
||||||
|
{
|
||||||
|
grav.Z = (float)(grav.Z * 1.037125);
|
||||||
|
}
|
||||||
|
//End Experimental Values
|
||||||
|
}
|
||||||
|
if ((m_flags & (VehicleFlag.NO_X)) != 0)
|
||||||
|
{
|
||||||
|
m_dir.X = 0;
|
||||||
|
}
|
||||||
|
if ((m_flags & (VehicleFlag.NO_Y)) != 0)
|
||||||
|
{
|
||||||
|
m_dir.Y = 0;
|
||||||
|
}
|
||||||
|
if ((m_flags & (VehicleFlag.NO_Z)) != 0)
|
||||||
|
{
|
||||||
|
m_dir.Z = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_lastPositionVector = d.BodyGetPosition(Body);
|
||||||
|
|
||||||
// Apply velocity
|
// Apply velocity
|
||||||
d.BodySetLinearVel(Body, m_dir.X, m_dir.Y, m_dir.Z);
|
d.BodySetLinearVel(Body, m_dir.X, m_dir.Y, m_dir.Z);
|
||||||
// apply gravity force
|
// apply gravity force
|
||||||
|
@ -629,6 +907,12 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
// Sum velocities
|
// Sum velocities
|
||||||
m_lastAngularVelocity = m_angularMotorVelocity + vertattr; // + bank + deflection
|
m_lastAngularVelocity = m_angularMotorVelocity + vertattr; // + bank + deflection
|
||||||
|
|
||||||
|
if ((m_flags & (VehicleFlag.NO_DEFLECTION_UP)) != 0)
|
||||||
|
{
|
||||||
|
m_lastAngularVelocity.X = 0;
|
||||||
|
m_lastAngularVelocity.Y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_lastAngularVelocity.ApproxEquals(Vector3.Zero, 0.01f))
|
if (!m_lastAngularVelocity.ApproxEquals(Vector3.Zero, 0.01f))
|
||||||
{
|
{
|
||||||
|
@ -647,5 +931,44 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
d.BodySetAngularVel (Body, m_lastAngularVelocity.X, m_lastAngularVelocity.Y, m_lastAngularVelocity.Z);
|
d.BodySetAngularVel (Body, m_lastAngularVelocity.X, m_lastAngularVelocity.Y, m_lastAngularVelocity.Z);
|
||||||
|
|
||||||
} //end MoveAngular
|
} //end MoveAngular
|
||||||
|
internal void LimitRotation(float timestep)
|
||||||
|
{
|
||||||
|
d.Quaternion rot = d.BodyGetQuaternion(Body);
|
||||||
|
Quaternion rotq = new Quaternion(rot.X, rot.Y, rot.Z, rot.W); // rotq = rotation of object
|
||||||
|
d.Quaternion m_rot = new d.Quaternion();
|
||||||
|
bool changed = false;
|
||||||
|
m_rot.X = rotq.X;
|
||||||
|
m_rot.Y = rotq.Y;
|
||||||
|
m_rot.Z = rotq.Z;
|
||||||
|
m_rot.W = rotq.W;
|
||||||
|
if (m_RollreferenceFrame != Quaternion.Identity)
|
||||||
|
{
|
||||||
|
if (rotq.X >= m_RollreferenceFrame.X)
|
||||||
|
{
|
||||||
|
m_rot.X = rotq.X - (m_RollreferenceFrame.X / 2);
|
||||||
|
}
|
||||||
|
if (rotq.Y >= m_RollreferenceFrame.Y)
|
||||||
|
{
|
||||||
|
m_rot.Y = rotq.Y - (m_RollreferenceFrame.Y / 2);
|
||||||
|
}
|
||||||
|
if (rotq.X <= -m_RollreferenceFrame.X)
|
||||||
|
{
|
||||||
|
m_rot.X = rotq.X + (m_RollreferenceFrame.X / 2);
|
||||||
|
}
|
||||||
|
if (rotq.Y <= -m_RollreferenceFrame.Y)
|
||||||
|
{
|
||||||
|
m_rot.Y = rotq.Y + (m_RollreferenceFrame.Y / 2);
|
||||||
|
}
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
if ((m_flags & VehicleFlag.LOCK_ROTATION) != 0)
|
||||||
|
{
|
||||||
|
m_rot.X = 0;
|
||||||
|
m_rot.Y = 0;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
if (changed)
|
||||||
|
d.BodySetQuaternion(Body, ref m_rot);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2357,12 +2357,17 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
|
|
||||||
public override void VehicleFlagsSet(int flags)
|
public override void VehicleFlagsSet(int flags)
|
||||||
{
|
{
|
||||||
|
VehicleFlags(flags, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void VehicleFlagsRemove(int flags)
|
public override void VehicleFlagsRemove(int flags)
|
||||||
{
|
{
|
||||||
|
VehicleFlags(flags, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove)
|
||||||
|
{
|
||||||
|
m_vehicle.ProcessVehicleFlags(param, remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
public override void SetVolumeDetect(int param)
|
||||||
|
|
|
@ -192,6 +192,8 @@ namespace OpenSim.Region.Physics.POSPlugin
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove) { }
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
public override void SetVolumeDetect(int param)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -149,6 +149,8 @@ namespace OpenSim.Region.Physics.POSPlugin
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove) { }
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
public override void SetVolumeDetect(int param)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,361 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Nini.Config;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Region.Physics.Manager;
|
||||||
|
using PhysXWrapper;
|
||||||
|
using Quaternion=OpenMetaverse.Quaternion;
|
||||||
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
|
using OpenMetaverse;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.Physics.PhysXPlugin
|
||||||
|
{
|
||||||
|
public class PhysXCharacter : PhysicsActor
|
||||||
|
{
|
||||||
|
private Vector3 _position;
|
||||||
|
private Vector3 _velocity;
|
||||||
|
private Vector3 m_rotationalVelocity = Vector3.Zero;
|
||||||
|
private Vector3 _acceleration;
|
||||||
|
private NxCharacter _character;
|
||||||
|
private bool flying;
|
||||||
|
private bool iscolliding = false;
|
||||||
|
private float gravityAccel;
|
||||||
|
|
||||||
|
public PhysXCharacter(NxCharacter character)
|
||||||
|
{
|
||||||
|
_character = character;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int PhysicsActorType
|
||||||
|
{
|
||||||
|
get { return (int) ActorTypes.Agent; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool SetAlwaysRun
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override uint LocalID
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Grabbed
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Selected
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float Buoyancy
|
||||||
|
{
|
||||||
|
get { return 0f; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool FloatOnWater
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsPhysical
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool ThrottleUpdates
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Flying
|
||||||
|
{
|
||||||
|
get { return flying; }
|
||||||
|
set { flying = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsColliding
|
||||||
|
{
|
||||||
|
get { return iscolliding; }
|
||||||
|
set { iscolliding = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CollidingGround
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CollidingObj
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 RotationalVelocity
|
||||||
|
{
|
||||||
|
get { return m_rotationalVelocity; }
|
||||||
|
set { m_rotationalVelocity = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Stopped
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Position
|
||||||
|
{
|
||||||
|
get { return _position; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_position = value;
|
||||||
|
Vec3 ps = new Vec3();
|
||||||
|
ps.X = value.X;
|
||||||
|
ps.Y = value.Y;
|
||||||
|
ps.Z = value.Z;
|
||||||
|
_character.Position = ps;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Size
|
||||||
|
{
|
||||||
|
get { return Vector3.Zero; }
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float Mass
|
||||||
|
{
|
||||||
|
get { return 0f; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Force
|
||||||
|
{
|
||||||
|
get { return Vector3.Zero; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int VehicleType
|
||||||
|
{
|
||||||
|
get { return 0; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleFloatParam(int param, float value)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleVectorParam(int param, Vector3 value)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleRotationParam(int param, Quaternion rotation)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlagsSet(int param)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlagsRemove(int param)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetVolumeDetect(int param)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 CenterOfMass
|
||||||
|
{
|
||||||
|
get { return Vector3.Zero; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 GeometricCenter
|
||||||
|
{
|
||||||
|
get { return Vector3.Zero; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Velocity
|
||||||
|
{
|
||||||
|
get { return _velocity; }
|
||||||
|
set { _velocity = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float CollisionScore
|
||||||
|
{
|
||||||
|
get { return 0f; }
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Kinematic
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Quaternion Orientation
|
||||||
|
{
|
||||||
|
get { return Quaternion.Identity; }
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Acceleration
|
||||||
|
{
|
||||||
|
get { return _acceleration; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetAcceleration(Vector3 accel)
|
||||||
|
{
|
||||||
|
_acceleration = accel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AddForce(Vector3 force, bool pushforce)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Torque
|
||||||
|
{
|
||||||
|
get { return Vector3.Zero; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AddAngularForce(Vector3 force, bool pushforce)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void link(PhysicsActor obj)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void delink()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void LockAngularMotion(Vector3 axis)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetMomentum(Vector3 momentum)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Move(float timeStep)
|
||||||
|
{
|
||||||
|
Vec3 vec = new Vec3();
|
||||||
|
vec.X = _velocity.X*timeStep;
|
||||||
|
vec.Y = _velocity.Y*timeStep;
|
||||||
|
if (flying)
|
||||||
|
{
|
||||||
|
vec.Z = (_velocity.Z)*timeStep;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gravityAccel += -9.8f;
|
||||||
|
vec.Z = (gravityAccel + _velocity.Z)*timeStep;
|
||||||
|
}
|
||||||
|
int res = _character.Move(vec);
|
||||||
|
if (res == 1)
|
||||||
|
{
|
||||||
|
gravityAccel = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PrimitiveBaseShape Shape
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdatePosition()
|
||||||
|
{
|
||||||
|
Vec3 vec = _character.Position;
|
||||||
|
_position.X = vec.X;
|
||||||
|
_position.Y = vec.Y;
|
||||||
|
_position.Z = vec.Z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void CrossingFailure()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 PIDTarget { set { return; } }
|
||||||
|
public override bool PIDActive { set { return; } }
|
||||||
|
public override float PIDTau { set { return; } }
|
||||||
|
|
||||||
|
public override float PIDHoverHeight { set { return; } }
|
||||||
|
public override bool PIDHoverActive { set { return; } }
|
||||||
|
public override PIDHoverType PIDHoverType { set { return; } }
|
||||||
|
public override float PIDHoverTau { set { return; } }
|
||||||
|
|
||||||
|
public override Quaternion APIDTarget
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool APIDActive
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float APIDStrength
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float APIDDamping
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SubscribeEvents(int ms)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public override void UnSubscribeEvents()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public override bool SubscribedEvents()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,861 +0,0 @@
|
||||||
/*/*
|
|
||||||
* Copyright (c) Contributors, http://opensimulator.org/
|
|
||||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
* * Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* * Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* * Neither the name of the OpenSimulator Project nor the
|
|
||||||
* names of its contributors may be used to endorse or promote products
|
|
||||||
* derived from this software without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
|
||||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Nini.Config;
|
|
||||||
using OpenSim.Framework;
|
|
||||||
using OpenSim.Region.Physics.Manager;
|
|
||||||
using PhysXWrapper;
|
|
||||||
using Quaternion=OpenMetaverse.Quaternion;
|
|
||||||
using System.Reflection;
|
|
||||||
using log4net;
|
|
||||||
using OpenMetaverse;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.Physics.PhysXPlugin
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Will be the PhysX plugin but for now will be a very basic physics engine
|
|
||||||
/// </summary>
|
|
||||||
public class PhysXPlugin : IPhysicsPlugin
|
|
||||||
{
|
|
||||||
//private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
private PhysXScene _mScene;
|
|
||||||
|
|
||||||
public PhysXPlugin()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Init()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PhysicsScene GetScene(string sceneIdentifier)
|
|
||||||
{
|
|
||||||
if (_mScene == null)
|
|
||||||
{
|
|
||||||
_mScene = new PhysXScene(sceneIdentifier);
|
|
||||||
}
|
|
||||||
return (_mScene);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string GetName()
|
|
||||||
{
|
|
||||||
return ("RealPhysX");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class PhysXScene : PhysicsScene
|
|
||||||
{
|
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
private List<PhysXCharacter> _characters = new List<PhysXCharacter>();
|
|
||||||
private List<PhysXPrim> _prims = new List<PhysXPrim>();
|
|
||||||
private float[] _heightMap = null;
|
|
||||||
private NxPhysicsSDK mySdk;
|
|
||||||
private NxScene scene;
|
|
||||||
|
|
||||||
// protected internal string sceneIdentifier;
|
|
||||||
public PhysXScene(string _sceneIdentifier)
|
|
||||||
{
|
|
||||||
//sceneIdentifier = _sceneIdentifier;
|
|
||||||
|
|
||||||
mySdk = NxPhysicsSDK.CreateSDK();
|
|
||||||
m_log.Info("Sdk created - now creating scene");
|
|
||||||
scene = mySdk.CreateScene();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Initialise(IMesher meshmerizer, IConfigSource config)
|
|
||||||
{
|
|
||||||
// Does nothing right now
|
|
||||||
}
|
|
||||||
public override void Dispose()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void SetWaterLevel(float baseheight)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying)
|
|
||||||
{
|
|
||||||
Vec3 pos = new Vec3();
|
|
||||||
pos.X = position.X;
|
|
||||||
pos.Y = position.Y;
|
|
||||||
pos.Z = position.Z;
|
|
||||||
PhysXCharacter act = new PhysXCharacter(scene.AddCharacter(pos));
|
|
||||||
act.Flying = isFlying;
|
|
||||||
act.Position = position;
|
|
||||||
_characters.Add(act);
|
|
||||||
return act;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void RemovePrim(PhysicsActor prim)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void RemoveAvatar(PhysicsActor actor)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
private PhysicsActor AddPrim(Vector3 position, Vector3 size, Quaternion rotation)
|
|
||||||
{
|
|
||||||
Vec3 pos = new Vec3();
|
|
||||||
pos.X = position.X;
|
|
||||||
pos.Y = position.Y;
|
|
||||||
pos.Z = position.Z;
|
|
||||||
Vec3 siz = new Vec3();
|
|
||||||
siz.X = size.X;
|
|
||||||
siz.Y = size.Y;
|
|
||||||
siz.Z = size.Z;
|
|
||||||
PhysXPrim act = new PhysXPrim(scene.AddNewBox(pos, siz));
|
|
||||||
_prims.Add(act);
|
|
||||||
return act;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
|
|
||||||
Vector3 size, Quaternion rotation) //To be removed
|
|
||||||
{
|
|
||||||
return AddPrimShape(primName, pbs, position, size, rotation, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
|
|
||||||
Vector3 size, Quaternion rotation, bool isPhysical)
|
|
||||||
{
|
|
||||||
return AddPrim(position, size, rotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void AddPhysicsActorTaint(PhysicsActor prim)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float Simulate(float timeStep)
|
|
||||||
{
|
|
||||||
float fps = 0f;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (PhysXCharacter actor in _characters)
|
|
||||||
{
|
|
||||||
actor.Move(timeStep);
|
|
||||||
}
|
|
||||||
scene.Simulate(timeStep);
|
|
||||||
scene.FetchResults();
|
|
||||||
scene.UpdateControllers();
|
|
||||||
|
|
||||||
foreach (PhysXCharacter actor in _characters)
|
|
||||||
{
|
|
||||||
actor.UpdatePosition();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.Error(e.Message);
|
|
||||||
}
|
|
||||||
return fps;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void GetResults()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsThreaded
|
|
||||||
{
|
|
||||||
get { return (false); // for now we won't be multithreaded
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void SetTerrain(float[] heightMap)
|
|
||||||
{
|
|
||||||
if (_heightMap != null)
|
|
||||||
{
|
|
||||||
m_log.Debug("PhysX - deleting old terrain");
|
|
||||||
scene.DeleteTerrain();
|
|
||||||
}
|
|
||||||
_heightMap = heightMap;
|
|
||||||
scene.AddTerrain(heightMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void DeleteTerrain()
|
|
||||||
{
|
|
||||||
scene.DeleteTerrain();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Dictionary<uint, float> GetTopColliders()
|
|
||||||
{
|
|
||||||
Dictionary<uint, float> returncolliders = new Dictionary<uint, float>();
|
|
||||||
return returncolliders;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public class PhysXCharacter : PhysicsActor
|
|
||||||
{
|
|
||||||
private Vector3 _position;
|
|
||||||
private Vector3 _velocity;
|
|
||||||
private Vector3 m_rotationalVelocity = Vector3.Zero;
|
|
||||||
private Vector3 _acceleration;
|
|
||||||
private NxCharacter _character;
|
|
||||||
private bool flying;
|
|
||||||
private bool iscolliding = false;
|
|
||||||
private float gravityAccel;
|
|
||||||
|
|
||||||
public PhysXCharacter(NxCharacter character)
|
|
||||||
{
|
|
||||||
_character = character;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int PhysicsActorType
|
|
||||||
{
|
|
||||||
get { return (int) ActorTypes.Agent; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool SetAlwaysRun
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override uint LocalID
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Grabbed
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Selected
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float Buoyancy
|
|
||||||
{
|
|
||||||
get { return 0f; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool FloatOnWater
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsPhysical
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool ThrottleUpdates
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Flying
|
|
||||||
{
|
|
||||||
get { return flying; }
|
|
||||||
set { flying = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsColliding
|
|
||||||
{
|
|
||||||
get { return iscolliding; }
|
|
||||||
set { iscolliding = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CollidingGround
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CollidingObj
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 RotationalVelocity
|
|
||||||
{
|
|
||||||
get { return m_rotationalVelocity; }
|
|
||||||
set { m_rotationalVelocity = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Stopped
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Position
|
|
||||||
{
|
|
||||||
get { return _position; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_position = value;
|
|
||||||
Vec3 ps = new Vec3();
|
|
||||||
ps.X = value.X;
|
|
||||||
ps.Y = value.Y;
|
|
||||||
ps.Z = value.Z;
|
|
||||||
_character.Position = ps;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Size
|
|
||||||
{
|
|
||||||
get { return Vector3.Zero; }
|
|
||||||
set { }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float Mass
|
|
||||||
{
|
|
||||||
get { return 0f; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Force
|
|
||||||
{
|
|
||||||
get { return Vector3.Zero; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int VehicleType
|
|
||||||
{
|
|
||||||
get { return 0; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VehicleFloatParam(int param, float value)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VehicleVectorParam(int param, Vector3 value)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VehicleRotationParam(int param, Quaternion rotation)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VehicleFlagsSet(int flags)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VehicleFlagsRemove(int flags)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public override Vector3 CenterOfMass
|
|
||||||
{
|
|
||||||
get { return Vector3.Zero; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 GeometricCenter
|
|
||||||
{
|
|
||||||
get { return Vector3.Zero; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Velocity
|
|
||||||
{
|
|
||||||
get { return _velocity; }
|
|
||||||
set { _velocity = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float CollisionScore
|
|
||||||
{
|
|
||||||
get { return 0f; }
|
|
||||||
set { }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Kinematic
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Quaternion Orientation
|
|
||||||
{
|
|
||||||
get { return Quaternion.Identity; }
|
|
||||||
set { }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Acceleration
|
|
||||||
{
|
|
||||||
get { return _acceleration; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetAcceleration(Vector3 accel)
|
|
||||||
{
|
|
||||||
_acceleration = accel;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void AddForce(Vector3 force, bool pushforce)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
public override Vector3 Torque
|
|
||||||
{
|
|
||||||
get { return Vector3.Zero; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
public override void AddAngularForce(Vector3 force, bool pushforce)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void link(PhysicsActor obj)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void delink()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void LockAngularMotion(Vector3 axis)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void SetMomentum(Vector3 momentum)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Move(float timeStep)
|
|
||||||
{
|
|
||||||
Vec3 vec = new Vec3();
|
|
||||||
vec.X = _velocity.X*timeStep;
|
|
||||||
vec.Y = _velocity.Y*timeStep;
|
|
||||||
if (flying)
|
|
||||||
{
|
|
||||||
vec.Z = (_velocity.Z)*timeStep;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gravityAccel += -9.8f;
|
|
||||||
vec.Z = (gravityAccel + _velocity.Z)*timeStep;
|
|
||||||
}
|
|
||||||
int res = _character.Move(vec);
|
|
||||||
if (res == 1)
|
|
||||||
{
|
|
||||||
gravityAccel = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override PrimitiveBaseShape Shape
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdatePosition()
|
|
||||||
{
|
|
||||||
Vec3 vec = _character.Position;
|
|
||||||
_position.X = vec.X;
|
|
||||||
_position.Y = vec.Y;
|
|
||||||
_position.Z = vec.Z;
|
|
||||||
}
|
|
||||||
public override void CrossingFailure()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 PIDTarget { set { return; } }
|
|
||||||
public override bool PIDActive { set { return; } }
|
|
||||||
public override float PIDTau { set { return; } }
|
|
||||||
|
|
||||||
public override float PIDHoverHeight { set { return; } }
|
|
||||||
public override bool PIDHoverActive { set { return; } }
|
|
||||||
public override PIDHoverType PIDHoverType { set { return; } }
|
|
||||||
public override float PIDHoverTau { set { return; } }
|
|
||||||
|
|
||||||
public override Quaternion APIDTarget
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool APIDActive
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float APIDStrength
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float APIDDamping
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public override void SubscribeEvents(int ms)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
public override void UnSubscribeEvents()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
public override bool SubscribedEvents()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class PhysXPrim : PhysicsActor
|
|
||||||
{
|
|
||||||
private Vector3 _velocity;
|
|
||||||
private Vector3 _acceleration;
|
|
||||||
private Vector3 m_rotationalVelocity;
|
|
||||||
private NxActor _prim;
|
|
||||||
|
|
||||||
public PhysXPrim(NxActor prim)
|
|
||||||
{
|
|
||||||
_velocity = Vector3.Zero;
|
|
||||||
_acceleration = Vector3.Zero;
|
|
||||||
_prim = prim;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int PhysicsActorType
|
|
||||||
{
|
|
||||||
get { return (int) ActorTypes.Prim; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsPhysical
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool SetAlwaysRun
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override uint LocalID
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Grabbed
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Selected
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float Buoyancy
|
|
||||||
{
|
|
||||||
get { return 0f; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool FloatOnWater
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool ThrottleUpdates
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 RotationalVelocity
|
|
||||||
{
|
|
||||||
get { return m_rotationalVelocity; }
|
|
||||||
set { m_rotationalVelocity = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Flying
|
|
||||||
{
|
|
||||||
get { return false; //no flying prims for you
|
|
||||||
}
|
|
||||||
set { }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool IsColliding
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CollidingGround
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool CollidingObj
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Stopped
|
|
||||||
{
|
|
||||||
get { return false; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Position
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
Vector3 pos = Vector3.Zero;
|
|
||||||
Vec3 vec = _prim.Position;
|
|
||||||
pos.X = vec.X;
|
|
||||||
pos.Y = vec.Y;
|
|
||||||
pos.Z = vec.Z;
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
Vector3 vec = value;
|
|
||||||
Vec3 pos = new Vec3();
|
|
||||||
pos.X = vec.X;
|
|
||||||
pos.Y = vec.Y;
|
|
||||||
pos.Z = vec.Z;
|
|
||||||
_prim.Position = pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override PrimitiveBaseShape Shape
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Velocity
|
|
||||||
{
|
|
||||||
get { return _velocity; }
|
|
||||||
set { _velocity = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Torque
|
|
||||||
{
|
|
||||||
get { return Vector3.Zero; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float CollisionScore
|
|
||||||
{
|
|
||||||
get { return 0f; }
|
|
||||||
set { }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Kinematic
|
|
||||||
{
|
|
||||||
get { return _prim.Kinematic; }
|
|
||||||
set { _prim.Kinematic = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Quaternion Orientation
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
Quaternion res;
|
|
||||||
PhysXWrapper.Quaternion quat = _prim.GetOrientation();
|
|
||||||
res.W = quat.W;
|
|
||||||
res.X = quat.X;
|
|
||||||
res.Y = quat.Y;
|
|
||||||
res.Z = quat.Z;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
set { }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Acceleration
|
|
||||||
{
|
|
||||||
get { return _acceleration; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetAcceleration(Vector3 accel)
|
|
||||||
{
|
|
||||||
_acceleration = accel;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void AddForce(Vector3 force, bool pushforce)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void AddAngularForce(Vector3 force, bool pushforce)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void SetMomentum(Vector3 momentum)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Size
|
|
||||||
{
|
|
||||||
get { return Vector3.Zero; }
|
|
||||||
set { }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void link(PhysicsActor obj)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void delink()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void LockAngularMotion(Vector3 axis)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float Mass
|
|
||||||
{
|
|
||||||
get { return 0f; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 Force
|
|
||||||
{
|
|
||||||
get { return Vector3.Zero; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int VehicleType
|
|
||||||
{
|
|
||||||
get { return 0; }
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VehicleFloatParam(int param, float value)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VehicleVectorParam(int param, Vector3 value)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VehicleRotationParam(int param, Quaternion rotation)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VehicleFlagsSet(int flags)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void VehicleFlagsRemove(int flags)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void SetVolumeDetect(int param)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 CenterOfMass
|
|
||||||
{
|
|
||||||
get { return Vector3.Zero; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 GeometricCenter
|
|
||||||
{
|
|
||||||
get { return Vector3.Zero; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void CrossingFailure()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Vector3 PIDTarget { set { return; } }
|
|
||||||
public override bool PIDActive { set { return; } }
|
|
||||||
public override float PIDTau { set { return; } }
|
|
||||||
|
|
||||||
public override float PIDHoverHeight { set { return; } }
|
|
||||||
public override bool PIDHoverActive { set { return; } }
|
|
||||||
public override PIDHoverType PIDHoverType { set { return; } }
|
|
||||||
public override float PIDHoverTau { set { return; } }
|
|
||||||
|
|
||||||
public override Quaternion APIDTarget
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool APIDActive
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float APIDStrength
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override float APIDDamping
|
|
||||||
{
|
|
||||||
set { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public override void SubscribeEvents(int ms)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
public override void UnSubscribeEvents()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
public override bool SubscribedEvents()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,349 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Nini.Config;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Region.Physics.Manager;
|
||||||
|
using PhysXWrapper;
|
||||||
|
using Quaternion=OpenMetaverse.Quaternion;
|
||||||
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
|
using OpenMetaverse;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.Physics.PhysXPlugin
|
||||||
|
{
|
||||||
|
public class PhysXPrim : PhysicsActor
|
||||||
|
{
|
||||||
|
private Vector3 _velocity;
|
||||||
|
private Vector3 _acceleration;
|
||||||
|
private Vector3 m_rotationalVelocity;
|
||||||
|
private NxActor _prim;
|
||||||
|
|
||||||
|
public PhysXPrim(NxActor prim)
|
||||||
|
{
|
||||||
|
_velocity = Vector3.Zero;
|
||||||
|
_acceleration = Vector3.Zero;
|
||||||
|
_prim = prim;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int PhysicsActorType
|
||||||
|
{
|
||||||
|
get { return (int) ActorTypes.Prim; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsPhysical
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool SetAlwaysRun
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override uint LocalID
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Grabbed
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Selected
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float Buoyancy
|
||||||
|
{
|
||||||
|
get { return 0f; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool FloatOnWater
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool ThrottleUpdates
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 RotationalVelocity
|
||||||
|
{
|
||||||
|
get { return m_rotationalVelocity; }
|
||||||
|
set { m_rotationalVelocity = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Flying
|
||||||
|
{
|
||||||
|
get { return false; //no flying prims for you
|
||||||
|
}
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsColliding
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CollidingGround
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CollidingObj
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Stopped
|
||||||
|
{
|
||||||
|
get { return false; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Position
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Vector3 pos = Vector3.Zero;
|
||||||
|
Vec3 vec = _prim.Position;
|
||||||
|
pos.X = vec.X;
|
||||||
|
pos.Y = vec.Y;
|
||||||
|
pos.Z = vec.Z;
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
Vector3 vec = value;
|
||||||
|
Vec3 pos = new Vec3();
|
||||||
|
pos.X = vec.X;
|
||||||
|
pos.Y = vec.Y;
|
||||||
|
pos.Z = vec.Z;
|
||||||
|
_prim.Position = pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PrimitiveBaseShape Shape
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Velocity
|
||||||
|
{
|
||||||
|
get { return _velocity; }
|
||||||
|
set { _velocity = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Torque
|
||||||
|
{
|
||||||
|
get { return Vector3.Zero; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float CollisionScore
|
||||||
|
{
|
||||||
|
get { return 0f; }
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Kinematic
|
||||||
|
{
|
||||||
|
get { return _prim.Kinematic; }
|
||||||
|
set { _prim.Kinematic = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Quaternion Orientation
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Quaternion res;
|
||||||
|
PhysXWrapper.Quaternion quat = _prim.GetOrientation();
|
||||||
|
res.W = quat.W;
|
||||||
|
res.X = quat.X;
|
||||||
|
res.Y = quat.Y;
|
||||||
|
res.Z = quat.Z;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Acceleration
|
||||||
|
{
|
||||||
|
get { return _acceleration; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetAcceleration(Vector3 accel)
|
||||||
|
{
|
||||||
|
_acceleration = accel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AddForce(Vector3 force, bool pushforce)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AddAngularForce(Vector3 force, bool pushforce)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetMomentum(Vector3 momentum)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Size
|
||||||
|
{
|
||||||
|
get { return Vector3.Zero; }
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void link(PhysicsActor obj)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void delink()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void LockAngularMotion(Vector3 axis)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float Mass
|
||||||
|
{
|
||||||
|
get { return 0f; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 Force
|
||||||
|
{
|
||||||
|
get { return Vector3.Zero; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int VehicleType
|
||||||
|
{
|
||||||
|
get { return 0; }
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleFloatParam(int param, float value)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleVectorParam(int param, Vector3 value)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleRotationParam(int param, Quaternion rotation)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void VehicleFlags(int param, bool remove) { }
|
||||||
|
|
||||||
|
public override void VehicleFlagsSet(int param) { }
|
||||||
|
|
||||||
|
public override void VehicleFlagsRemove(int param) { }
|
||||||
|
|
||||||
|
public override void SetVolumeDetect(int param)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 CenterOfMass
|
||||||
|
{
|
||||||
|
get { return Vector3.Zero; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 GeometricCenter
|
||||||
|
{
|
||||||
|
get { return Vector3.Zero; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void CrossingFailure()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Vector3 PIDTarget { set { return; } }
|
||||||
|
public override bool PIDActive { set { return; } }
|
||||||
|
public override float PIDTau { set { return; } }
|
||||||
|
|
||||||
|
public override float PIDHoverHeight { set { return; } }
|
||||||
|
public override bool PIDHoverActive { set { return; } }
|
||||||
|
public override PIDHoverType PIDHoverType { set { return; } }
|
||||||
|
public override float PIDHoverTau { set { return; } }
|
||||||
|
|
||||||
|
public override Quaternion APIDTarget
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool APIDActive
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float APIDStrength
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float APIDDamping
|
||||||
|
{
|
||||||
|
set { return; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public override void SubscribeEvents(int ms)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public override void UnSubscribeEvents()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public override bool SubscribedEvents()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,183 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Nini.Config;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Region.Physics.Manager;
|
||||||
|
using PhysXWrapper;
|
||||||
|
using Quaternion=OpenMetaverse.Quaternion;
|
||||||
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
|
using OpenMetaverse;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.Physics.PhysXPlugin
|
||||||
|
{
|
||||||
|
public class PhysXScene : PhysicsScene
|
||||||
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
private List<PhysXCharacter> _characters = new List<PhysXCharacter>();
|
||||||
|
private List<PhysXPrim> _prims = new List<PhysXPrim>();
|
||||||
|
private float[] _heightMap = null;
|
||||||
|
private NxPhysicsSDK mySdk;
|
||||||
|
private NxScene scene;
|
||||||
|
|
||||||
|
// protected internal string sceneIdentifier;
|
||||||
|
public PhysXScene(string _sceneIdentifier)
|
||||||
|
{
|
||||||
|
//sceneIdentifier = _sceneIdentifier;
|
||||||
|
|
||||||
|
mySdk = NxPhysicsSDK.CreateSDK();
|
||||||
|
m_log.Info("Sdk created - now creating scene");
|
||||||
|
scene = mySdk.CreateScene();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Initialise(IMesher meshmerizer, IConfigSource config)
|
||||||
|
{
|
||||||
|
// Does nothing right now
|
||||||
|
}
|
||||||
|
public override void Dispose()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetWaterLevel(float baseheight)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying)
|
||||||
|
{
|
||||||
|
Vec3 pos = new Vec3();
|
||||||
|
pos.X = position.X;
|
||||||
|
pos.Y = position.Y;
|
||||||
|
pos.Z = position.Z;
|
||||||
|
PhysXCharacter act = new PhysXCharacter(scene.AddCharacter(pos));
|
||||||
|
act.Flying = isFlying;
|
||||||
|
act.Position = position;
|
||||||
|
_characters.Add(act);
|
||||||
|
return act;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void RemovePrim(PhysicsActor prim)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void RemoveAvatar(PhysicsActor actor)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private PhysicsActor AddPrim(Vector3 position, Vector3 size, Quaternion rotation)
|
||||||
|
{
|
||||||
|
Vec3 pos = new Vec3();
|
||||||
|
pos.X = position.X;
|
||||||
|
pos.Y = position.Y;
|
||||||
|
pos.Z = position.Z;
|
||||||
|
Vec3 siz = new Vec3();
|
||||||
|
siz.X = size.X;
|
||||||
|
siz.Y = size.Y;
|
||||||
|
siz.Z = size.Z;
|
||||||
|
PhysXPrim act = new PhysXPrim(scene.AddNewBox(pos, siz));
|
||||||
|
_prims.Add(act);
|
||||||
|
return act;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
|
||||||
|
Vector3 size, Quaternion rotation) //To be removed
|
||||||
|
{
|
||||||
|
return AddPrimShape(primName, pbs, position, size, rotation, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, Vector3 position,
|
||||||
|
Vector3 size, Quaternion rotation, bool isPhysical)
|
||||||
|
{
|
||||||
|
return AddPrim(position, size, rotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void AddPhysicsActorTaint(PhysicsActor prim)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override float Simulate(float timeStep)
|
||||||
|
{
|
||||||
|
float fps = 0f;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (PhysXCharacter actor in _characters)
|
||||||
|
{
|
||||||
|
actor.Move(timeStep);
|
||||||
|
}
|
||||||
|
scene.Simulate(timeStep);
|
||||||
|
scene.FetchResults();
|
||||||
|
scene.UpdateControllers();
|
||||||
|
|
||||||
|
foreach (PhysXCharacter actor in _characters)
|
||||||
|
{
|
||||||
|
actor.UpdatePosition();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.Error(e.Message);
|
||||||
|
}
|
||||||
|
return fps;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void GetResults()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsThreaded
|
||||||
|
{
|
||||||
|
// for now we won't be multithreaded
|
||||||
|
get { return (false); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetTerrain(float[] heightMap)
|
||||||
|
{
|
||||||
|
if (_heightMap != null)
|
||||||
|
{
|
||||||
|
m_log.Debug("PhysX - deleting old terrain");
|
||||||
|
scene.DeleteTerrain();
|
||||||
|
}
|
||||||
|
_heightMap = heightMap;
|
||||||
|
scene.AddTerrain(heightMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void DeleteTerrain()
|
||||||
|
{
|
||||||
|
scene.DeleteTerrain();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Dictionary<uint, float> GetTopColliders()
|
||||||
|
{
|
||||||
|
Dictionary<uint, float> returncolliders = new Dictionary<uint, float>();
|
||||||
|
return returncolliders;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1252,7 +1252,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB)
|
if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB)
|
||||||
{
|
{
|
||||||
NotImplemented("llSetStatus - STATUS_BLOCK_GRAB");
|
if (value != 0)
|
||||||
|
m_host.SetBlockGrab(true);
|
||||||
|
else
|
||||||
|
m_host.SetBlockGrab(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE)
|
if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE)
|
||||||
|
@ -1265,12 +1268,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
if ((status & ScriptBaseClass.STATUS_RETURN_AT_EDGE) == ScriptBaseClass.STATUS_RETURN_AT_EDGE)
|
if ((status & ScriptBaseClass.STATUS_RETURN_AT_EDGE) == ScriptBaseClass.STATUS_RETURN_AT_EDGE)
|
||||||
{
|
{
|
||||||
NotImplemented("llSetStatus - STATUS_RETURN_AT_EDGE");
|
if (value != 0)
|
||||||
|
m_host.SetReturnAtEdge(true);
|
||||||
|
else
|
||||||
|
m_host.SetReturnAtEdge(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((status & ScriptBaseClass.STATUS_SANDBOX) == ScriptBaseClass.STATUS_SANDBOX)
|
if ((status & ScriptBaseClass.STATUS_SANDBOX) == ScriptBaseClass.STATUS_SANDBOX)
|
||||||
{
|
{
|
||||||
NotImplemented("llSetStatus - STATUS_SANDBOX");
|
if (value != 0)
|
||||||
|
m_host.SetStatusSandbox(true);
|
||||||
|
else
|
||||||
|
m_host.SetStatusSandbox(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (statusrotationaxis != 0)
|
if (statusrotationaxis != 0)
|
||||||
|
@ -1307,8 +1316,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case ScriptBaseClass.STATUS_BLOCK_GRAB:
|
case ScriptBaseClass.STATUS_BLOCK_GRAB:
|
||||||
NotImplemented("llGetStatus - STATUS_BLOCK_GRAB");
|
if (m_host.GetBlockGrab())
|
||||||
return 0;
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
|
||||||
case ScriptBaseClass.STATUS_DIE_AT_EDGE:
|
case ScriptBaseClass.STATUS_DIE_AT_EDGE:
|
||||||
if (m_host.GetDieAtEdge())
|
if (m_host.GetDieAtEdge())
|
||||||
|
@ -1317,24 +1328,34 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case ScriptBaseClass.STATUS_RETURN_AT_EDGE:
|
case ScriptBaseClass.STATUS_RETURN_AT_EDGE:
|
||||||
NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE");
|
if (m_host.GetReturnAtEdge())
|
||||||
return 0;
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
|
||||||
case ScriptBaseClass.STATUS_ROTATE_X:
|
case ScriptBaseClass.STATUS_ROTATE_X:
|
||||||
NotImplemented("llGetStatus - STATUS_ROTATE_X");
|
if (m_host.GetAxisRotation(2) == 2)
|
||||||
return 0;
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
|
||||||
case ScriptBaseClass.STATUS_ROTATE_Y:
|
case ScriptBaseClass.STATUS_ROTATE_Y:
|
||||||
NotImplemented("llGetStatus - STATUS_ROTATE_Y");
|
if (m_host.GetAxisRotation(4) == 4)
|
||||||
return 0;
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
|
||||||
case ScriptBaseClass.STATUS_ROTATE_Z:
|
case ScriptBaseClass.STATUS_ROTATE_Z:
|
||||||
NotImplemented("llGetStatus - STATUS_ROTATE_Z");
|
if (m_host.GetAxisRotation(8) == 8)
|
||||||
return 0;
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
|
||||||
case ScriptBaseClass.STATUS_SANDBOX:
|
case ScriptBaseClass.STATUS_SANDBOX:
|
||||||
NotImplemented("llGetStatus - STATUS_SANDBOX");
|
if (m_host.GetStatusSandbox())
|
||||||
return 0;
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2346,7 +2367,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
// send the sound, once, to all clients in range
|
// send the sound, once, to all clients in range
|
||||||
m_host.SendSound(KeyOrName(sound).ToString(), volume, false, 0);
|
m_host.SendSound(KeyOrName(sound).ToString(), volume, false, 0, 0, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Xantor 20080528 we should do this differently.
|
// Xantor 20080528 we should do this differently.
|
||||||
|
@ -2376,42 +2397,98 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llLoopSoundMaster(string sound, double volume)
|
public void llLoopSoundMaster(string sound, double volume)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llLoopSoundMaster");
|
m_host.ParentGroup.LoopSoundMasterPrim = m_host;
|
||||||
|
lock (m_host.ParentGroup.LoopSoundSlavePrims)
|
||||||
|
{
|
||||||
|
foreach (SceneObjectPart prim in m_host.ParentGroup.LoopSoundSlavePrims)
|
||||||
|
{
|
||||||
|
if (prim.Sound != UUID.Zero)
|
||||||
|
llStopSound();
|
||||||
|
|
||||||
|
prim.Sound = KeyOrName(sound);
|
||||||
|
prim.SoundGain = volume;
|
||||||
|
prim.SoundFlags = 1; // looping
|
||||||
|
prim.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
|
||||||
|
|
||||||
|
prim.ScheduleFullUpdate();
|
||||||
|
prim.SendFullUpdateToAllClients();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (m_host.Sound != UUID.Zero)
|
||||||
|
llStopSound();
|
||||||
|
|
||||||
|
m_host.Sound = KeyOrName(sound);
|
||||||
|
m_host.SoundGain = volume;
|
||||||
|
m_host.SoundFlags = 1; // looping
|
||||||
|
m_host.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
|
||||||
|
|
||||||
|
m_host.ScheduleFullUpdate();
|
||||||
|
m_host.SendFullUpdateToAllClients();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llLoopSoundSlave(string sound, double volume)
|
public void llLoopSoundSlave(string sound, double volume)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llLoopSoundSlave");
|
lock (m_host.ParentGroup.LoopSoundSlavePrims)
|
||||||
|
{
|
||||||
|
m_host.ParentGroup.LoopSoundSlavePrims.Add(m_host);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llPlaySoundSlave(string sound, double volume)
|
public void llPlaySoundSlave(string sound, double volume)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llPlaySoundSlave");
|
|
||||||
|
// send the sound, once, to all clients in range
|
||||||
|
m_host.SendSound(KeyOrName(sound).ToString(), volume, false, 0, 0, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llTriggerSound(string sound, double volume)
|
public void llTriggerSound(string sound, double volume)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
// send the sound, once, to all clients in range
|
// send the sound, once, to all clients in range
|
||||||
m_host.SendSound(KeyOrName(sound).ToString(), volume, true, 0);
|
m_host.SendSound(KeyOrName(sound).ToString(), volume, true, 0, 0, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Xantor 20080528: Clear prim data of sound instead
|
// Xantor 20080528: Clear prim data of sound instead
|
||||||
public void llStopSound()
|
public void llStopSound()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
if (m_host.ParentGroup.LoopSoundSlavePrims.Contains(m_host))
|
||||||
m_host.Sound = UUID.Zero;
|
{
|
||||||
m_host.SoundGain = 0;
|
if (m_host.ParentGroup.LoopSoundMasterPrim == m_host)
|
||||||
m_host.SoundFlags = 0;
|
{
|
||||||
m_host.SoundRadius = 0;
|
foreach (SceneObjectPart part in m_host.ParentGroup.LoopSoundSlavePrims)
|
||||||
|
{
|
||||||
m_host.ScheduleFullUpdate();
|
part.Sound = UUID.Zero;
|
||||||
m_host.SendFullUpdateToAllClients();
|
part.SoundGain = 0;
|
||||||
|
part.SoundFlags = 0;
|
||||||
// m_host.SendSound(UUID.Zero.ToString(), 1.0, false, 2);
|
part.SoundRadius = 0;
|
||||||
|
part.ScheduleFullUpdate();
|
||||||
|
part.SendFullUpdateToAllClients();
|
||||||
|
}
|
||||||
|
m_host.ParentGroup.LoopSoundMasterPrim = null;
|
||||||
|
m_host.ParentGroup.LoopSoundSlavePrims.Clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_host.Sound = UUID.Zero;
|
||||||
|
m_host.SoundGain = 0;
|
||||||
|
m_host.SoundFlags = 0;
|
||||||
|
m_host.SoundRadius = 0;
|
||||||
|
m_host.ScheduleFullUpdate();
|
||||||
|
m_host.SendFullUpdateToAllClients();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_host.Sound = UUID.Zero;
|
||||||
|
m_host.SoundGain = 0;
|
||||||
|
m_host.SoundFlags = 0;
|
||||||
|
m_host.SoundRadius = 0;
|
||||||
|
m_host.ScheduleFullUpdate();
|
||||||
|
m_host.SendFullUpdateToAllClients();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llPreloadSound(string sound)
|
public void llPreloadSound(string sound)
|
||||||
|
@ -2803,8 +2880,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
public void llLookAt(LSL_Vector target, double strength, double damping)
|
public void llLookAt(LSL_Vector target, double strength, double damping)
|
||||||
{
|
{
|
||||||
// partial implementation, rotates objects correctly but does not apply strength or damping attributes
|
|
||||||
|
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
// Determine where we are looking from
|
// Determine where we are looking from
|
||||||
LSL_Vector from = llGetPos();
|
LSL_Vector from = llGetPos();
|
||||||
|
@ -2824,9 +2899,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
// the angles of rotation in radians into rotation value
|
// the angles of rotation in radians into rotation value
|
||||||
|
|
||||||
LSL_Types.Quaternion rot = llEuler2Rot(angle);
|
LSL_Types.Quaternion rot = llEuler2Rot(angle);
|
||||||
|
Quaternion rotation = new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s);
|
||||||
|
m_host.startLookAt(rotation, (float)damping, (float)strength);
|
||||||
// Orient the object to the angle calculated
|
// Orient the object to the angle calculated
|
||||||
llSetRot(rot);
|
//llSetRot(rot);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llRotLookAt(LSL_Rotation target, double strength, double damping)
|
public void llRotLookAt(LSL_Rotation target, double strength, double damping)
|
||||||
|
@ -3329,13 +3405,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llPointAt(LSL_Vector pos)
|
public void llPointAt(LSL_Vector pos)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llPointAt");
|
ScenePresence Owner = World.GetScenePresence(m_host.UUID);
|
||||||
|
LSL_Rotation rot = llEuler2Rot(pos);
|
||||||
|
Owner.PreviousRotation = Owner.Rotation;
|
||||||
|
Owner.Rotation = (new Quaternion((float)rot.x,(float)rot.y,(float)rot.z,(float)rot.s));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llStopPointAt()
|
public void llStopPointAt()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llStopPointAt");
|
ScenePresence Owner = m_host.ParentGroup.Scene.GetScenePresence(m_host.OwnerID);
|
||||||
|
Owner.Rotation = Owner.PreviousRotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llTargetOmega(LSL_Vector axis, double spinrate, double gain)
|
public void llTargetOmega(LSL_Vector axis, double spinrate, double gain)
|
||||||
|
@ -4138,8 +4218,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llCollisionSound(string impact_sound, double impact_volume)
|
public void llCollisionSound(string impact_sound, double impact_volume)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
//NotImplemented("llCollisionSound");
|
|
||||||
|
|
||||||
// TODO: Parameter check logic required.
|
// TODO: Parameter check logic required.
|
||||||
UUID soundId = UUID.Zero;
|
UUID soundId = UUID.Zero;
|
||||||
if (!UUID.TryParse(impact_sound, out soundId))
|
if (!UUID.TryParse(impact_sound, out soundId))
|
||||||
|
@ -4727,8 +4805,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public LSL_Vector llGetCenterOfMass()
|
public LSL_Vector llGetCenterOfMass()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llGetCenterOfMass");
|
Vector3 center = m_host.GetGeometricCenter();
|
||||||
return new LSL_Vector();
|
return new LSL_Vector(center.X,center.Y,center.Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_List llListSort(LSL_List src, int stride, int ascending)
|
public LSL_List llListSort(LSL_List src, int stride, int ascending)
|
||||||
|
@ -5461,8 +5539,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
flags |= ScriptBaseClass.AGENT_SITTING;
|
flags |= ScriptBaseClass.AGENT_SITTING;
|
||||||
}
|
}
|
||||||
|
|
||||||
//NotImplemented("llGetAgentInfo");
|
|
||||||
|
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5522,12 +5598,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate)
|
public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
SetTextureAnim(m_host, mode, face, sizex, sizey, start, length, rate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void llSetLinkTextureAnim(int linknumber, int mode, int face, int sizex, int sizey, double start, double length, double rate)
|
||||||
|
{
|
||||||
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
List<SceneObjectPart> parts = GetLinkParts(linknumber);
|
||||||
|
|
||||||
|
foreach (var part in parts)
|
||||||
|
{
|
||||||
|
SetTextureAnim(part, mode, face, sizex, sizey, start, length, rate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetTextureAnim(SceneObjectPart part, int mode, int face, int sizex, int sizey, double start, double length, double rate)
|
||||||
|
{
|
||||||
|
|
||||||
Primitive.TextureAnimation pTexAnim = new Primitive.TextureAnimation();
|
Primitive.TextureAnimation pTexAnim = new Primitive.TextureAnimation();
|
||||||
pTexAnim.Flags = (Primitive.TextureAnimMode)mode;
|
pTexAnim.Flags = (Primitive.TextureAnimMode)mode;
|
||||||
|
|
||||||
//ALL_SIDES
|
//ALL_SIDES
|
||||||
if (face == ScriptBaseClass.ALL_SIDES)
|
if (face == ScriptBaseClass.ALL_SIDES)
|
||||||
face = 255;
|
face = 255;
|
||||||
|
|
||||||
pTexAnim.Face = (uint)face;
|
pTexAnim.Face = (uint)face;
|
||||||
pTexAnim.Length = (float)length;
|
pTexAnim.Length = (float)length;
|
||||||
|
@ -5536,16 +5631,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
pTexAnim.SizeY = (uint)sizey;
|
pTexAnim.SizeY = (uint)sizey;
|
||||||
pTexAnim.Start = (float)start;
|
pTexAnim.Start = (float)start;
|
||||||
|
|
||||||
m_host.AddTextureAnimation(pTexAnim);
|
part.AddTextureAnimation(pTexAnim);
|
||||||
m_host.SendFullUpdateToAllClients();
|
part.SendFullUpdateToAllClients();
|
||||||
m_host.ParentGroup.HasGroupChanged = true;
|
part.ParentGroup.HasGroupChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llTriggerSoundLimited(string sound, double volume, LSL_Vector top_north_east,
|
public void llTriggerSoundLimited(string sound, double volume, LSL_Vector top_north_east,
|
||||||
LSL_Vector bottom_south_west)
|
LSL_Vector bottom_south_west)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llTriggerSoundLimited");
|
float radius1 = (float)llVecDist(llGetPos(), top_north_east);
|
||||||
|
float radius2 = (float)llVecDist(llGetPos(), bottom_south_west);
|
||||||
|
float radius = Math.Abs(radius1 - radius2);
|
||||||
|
m_host.SendSound(KeyOrName(sound).ToString(), volume, true, 0, radius, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llEjectFromLand(string pest)
|
public void llEjectFromLand(string pest)
|
||||||
|
@ -5932,13 +6030,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return ps;
|
return ps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void llLinkParticleSystem(int linknumber, LSL_List rules)
|
||||||
|
{
|
||||||
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
List<SceneObjectPart> parts = GetLinkParts(linknumber);
|
||||||
|
|
||||||
|
foreach (var part in parts)
|
||||||
|
{
|
||||||
|
SetParticleSystem(part, rules);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void llParticleSystem(LSL_List rules)
|
public void llParticleSystem(LSL_List rules)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
SetParticleSystem(m_host, rules);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetParticleSystem(SceneObjectPart part, LSL_List rules) {
|
||||||
|
|
||||||
|
|
||||||
if (rules.Length == 0)
|
if (rules.Length == 0)
|
||||||
{
|
{
|
||||||
m_host.RemoveParticleSystem();
|
part.RemoveParticleSystem();
|
||||||
m_host.ParentGroup.HasGroupChanged = true;
|
part.ParentGroup.HasGroupChanged = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -6049,7 +6165,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
prules.Target = m_host.UUID;
|
prules.Target = part.UUID;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -6075,16 +6191,35 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
prules.CRC = 1;
|
prules.CRC = 1;
|
||||||
|
|
||||||
m_host.AddNewParticleSystem(prules);
|
part.AddNewParticleSystem(prules);
|
||||||
m_host.ParentGroup.HasGroupChanged = true;
|
part.ParentGroup.HasGroupChanged = true;
|
||||||
}
|
}
|
||||||
m_host.SendFullUpdateToAllClients();
|
part.SendFullUpdateToAllClients();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llGroundRepel(double height, int water, double tau)
|
public void llGroundRepel(double height, int water, double tau)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llGroundRepel");
|
if (m_host.PhysActor != null)
|
||||||
|
{
|
||||||
|
float ground = (float)llGround(new LSL_Types.Vector3(0, 0, 0));
|
||||||
|
float waterLevel = (float)llWater(new LSL_Types.Vector3(0, 0, 0));
|
||||||
|
PIDHoverType hoverType = PIDHoverType.Ground;
|
||||||
|
if (water != 0)
|
||||||
|
{
|
||||||
|
hoverType = PIDHoverType.GroundAndWater;
|
||||||
|
if (ground < waterLevel)
|
||||||
|
height += waterLevel;
|
||||||
|
else
|
||||||
|
height += ground;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
height += ground;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_host.SetHoverHeight((float)height, hoverType, (float)tau);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected UUID GetTaskInventoryItem(string name)
|
protected UUID GetTaskInventoryItem(string name)
|
||||||
|
@ -6219,7 +6354,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
if (!m_host.ParentGroup.IsDeleted)
|
if (!m_host.ParentGroup.IsDeleted)
|
||||||
{
|
{
|
||||||
m_host.ParentGroup.RootPart.SetVehicleFlags(flags);
|
m_host.ParentGroup.RootPart.SetVehicleFlags(flags, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6231,7 +6366,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
if (!m_host.ParentGroup.IsDeleted)
|
if (!m_host.ParentGroup.IsDeleted)
|
||||||
{
|
{
|
||||||
m_host.ParentGroup.RootPart.RemoveVehicleFlags(flags);
|
m_host.ParentGroup.RootPart.SetVehicleFlags(flags, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6868,6 +7003,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
SetPrimParams(part, rules);
|
SetPrimParams(part, rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules)
|
||||||
|
{
|
||||||
|
llSetLinkPrimitiveParams(linknumber, rules);
|
||||||
|
}
|
||||||
|
|
||||||
protected void SetPrimParams(SceneObjectPart part, LSL_List rules)
|
protected void SetPrimParams(SceneObjectPart part, LSL_List rules)
|
||||||
{
|
{
|
||||||
if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted)
|
if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted)
|
||||||
|
@ -7226,6 +7366,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
face = rules.GetLSLIntegerItem(idx++);
|
face = rules.GetLSLIntegerItem(idx++);
|
||||||
int style = rules.GetLSLIntegerItem(idx++);
|
int style = rules.GetLSLIntegerItem(idx++);
|
||||||
SetTexGen(part, face, style);
|
SetTexGen(part, face, style);
|
||||||
|
break;
|
||||||
|
case (int)ScriptBaseClass.PRIM_TEXT:
|
||||||
|
if (remain < 3)
|
||||||
|
return;
|
||||||
|
string primText = rules.GetLSLStringItem(idx++);
|
||||||
|
LSL_Vector primTextColor = rules.GetVector3Item(idx++);
|
||||||
|
LSL_Float primTextAlpha = rules.GetLSLFloatItem(idx++);
|
||||||
|
Vector3 av3 = new Vector3(Util.Clip((float)primTextColor.x, 0.0f, 1.0f),
|
||||||
|
Util.Clip((float)primTextColor.y, 0.0f, 1.0f),
|
||||||
|
Util.Clip((float)primTextColor.z, 0.0f, 1.0f));
|
||||||
|
part.SetText(primText, av3, Util.Clip((float)primTextAlpha, 0.0f, 1.0f));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7271,7 +7423,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llRemoteDataSetRegion()
|
public void llRemoteDataSetRegion()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llRemoteDataSetRegion");
|
Deprecated("llRemoteDataSetRegion");
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Float llLog10(double val)
|
public LSL_Float llLog10(double val)
|
||||||
|
@ -7470,6 +7622,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return GetLinkPrimitiveParams(m_host, rules);
|
return GetLinkPrimitiveParams(m_host, rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LSL_List llGetLinkPrimitiveParams(int linknumber, LSL_List rules)
|
||||||
|
{
|
||||||
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
List<SceneObjectPart> parts = GetLinkParts(linknumber);
|
||||||
|
|
||||||
|
LSL_List res = new LSL_List();
|
||||||
|
|
||||||
|
foreach (var part in parts)
|
||||||
|
{
|
||||||
|
LSL_List partRes = GetLinkPrimitiveParams(part, rules);
|
||||||
|
res += partRes;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
public LSL_List GetLinkPrimitiveParams(SceneObjectPart part, LSL_List rules)
|
public LSL_List GetLinkPrimitiveParams(SceneObjectPart part, LSL_List rules)
|
||||||
{
|
{
|
||||||
LSL_List res = new LSL_List();
|
LSL_List res = new LSL_List();
|
||||||
|
@ -7853,6 +8022,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
res.Add(new LSL_Float(primglow));
|
res.Add(new LSL_Float(primglow));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case (int)ScriptBaseClass.PRIM_TEXT:
|
||||||
|
Color4 textColor = part.GetTextColor();
|
||||||
|
res.Add(part.Text);
|
||||||
|
res.Add(new LSL_Vector(textColor.R,
|
||||||
|
textColor.G,
|
||||||
|
textColor.B));
|
||||||
|
res.Add(new LSL_Float(textColor.A));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
@ -8409,7 +8586,39 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llSetInventoryPermMask(string item, int mask, int value)
|
public void llSetInventoryPermMask(string item, int mask, int value)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llSetInventoryPermMask");
|
if (m_ScriptEngine.Config.GetBoolean("AllowGodFunctions", false))
|
||||||
|
{
|
||||||
|
if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID))
|
||||||
|
{
|
||||||
|
lock (m_host.TaskInventory)
|
||||||
|
{
|
||||||
|
foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory)
|
||||||
|
{
|
||||||
|
if (inv.Value.Name == item)
|
||||||
|
{
|
||||||
|
switch (mask)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
inv.Value.BasePermissions = (uint)value;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
inv.Value.CurrentPermissions = (uint)value;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
inv.Value.GroupPermissions = (uint)value;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
inv.Value.EveryonePermissions = (uint)value;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
inv.Value.NextPermissions = (uint)value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_String llGetInventoryCreator(string item)
|
public LSL_String llGetInventoryCreator(string item)
|
||||||
|
@ -8843,6 +9052,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
// we send to all
|
// we send to all
|
||||||
landData.MediaID = new UUID(texture);
|
landData.MediaID = new UUID(texture);
|
||||||
landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0;
|
landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0;
|
||||||
|
landData.MediaSize[0] = width;
|
||||||
|
landData.MediaSize[1] = height;
|
||||||
|
landData.MediaType = mediaType;
|
||||||
|
|
||||||
// do that one last, it will cause a ParcelPropertiesUpdate
|
// do that one last, it will cause a ParcelPropertiesUpdate
|
||||||
landObject.SetMediaUrl(url);
|
landObject.SetMediaUrl(url);
|
||||||
|
@ -8902,11 +9114,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
LSL_List list = new LSL_List();
|
LSL_List list = new LSL_List();
|
||||||
//TO DO: make the implementation for the missing commands
|
//TO DO: make the implementation for the missing commands
|
||||||
//PARCEL_MEDIA_COMMAND_TEXTURE key uuid Use this to get or set the parcel's media texture.
|
|
||||||
//PARCEL_MEDIA_COMMAND_URL string url Used to get or set the parcel's media url.
|
|
||||||
//PARCEL_MEDIA_COMMAND_TYPE string mime_type Use this to get or set the parcel media MIME type (e.g. "text/html"). (1.19.1 RC0 or later)
|
|
||||||
//PARCEL_MEDIA_COMMAND_SIZE integer x, integer y Use this to get or set the parcel media pixel resolution. (1.19.1 RC0 or later)
|
|
||||||
//PARCEL_MEDIA_COMMAND_DESC string desc Use this to get or set the parcel media description. (1.19.1 RC0 or later)
|
|
||||||
//PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later)
|
//PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later)
|
||||||
for (int i = 0; i < aList.Data.Length; i++)
|
for (int i = 0; i < aList.Data.Length; i++)
|
||||||
{
|
{
|
||||||
|
@ -8924,6 +9131,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
case ParcelMediaCommandEnum.Texture:
|
case ParcelMediaCommandEnum.Texture:
|
||||||
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaID.ToString()));
|
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaID.ToString()));
|
||||||
break;
|
break;
|
||||||
|
case ParcelMediaCommandEnum.Type:
|
||||||
|
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaType));
|
||||||
|
break;
|
||||||
|
case ParcelMediaCommandEnum.Size:
|
||||||
|
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaSize[0]));
|
||||||
|
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaSize[1]));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url;
|
ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url;
|
||||||
NotImplemented("llParcelMediaQuery parameter do not supported yet: " + Enum.Parse(mediaCommandEnum.GetType() , aList.Data[i].ToString()).ToString());
|
NotImplemented("llParcelMediaQuery parameter do not supported yet: " + Enum.Parse(mediaCommandEnum.GetType() , aList.Data[i].ToString()).ToString());
|
||||||
|
|
|
@ -135,6 +135,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
LSL_Key llGetLinkKey(int linknum);
|
LSL_Key llGetLinkKey(int linknum);
|
||||||
LSL_String llGetLinkName(int linknum);
|
LSL_String llGetLinkName(int linknum);
|
||||||
LSL_Integer llGetLinkNumber();
|
LSL_Integer llGetLinkNumber();
|
||||||
|
LSL_List llGetLinkPrimitiveParams(int linknum, LSL_List rules);
|
||||||
LSL_Integer llGetListEntryType(LSL_List src, int index);
|
LSL_Integer llGetListEntryType(LSL_List src, int index);
|
||||||
LSL_Integer llGetListLength(LSL_List src);
|
LSL_Integer llGetListLength(LSL_List src);
|
||||||
LSL_Vector llGetLocalPos();
|
LSL_Vector llGetLocalPos();
|
||||||
|
@ -206,6 +207,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
void llInstantMessage(string user, string message);
|
void llInstantMessage(string user, string message);
|
||||||
LSL_String llIntegerToBase64(int number);
|
LSL_String llIntegerToBase64(int number);
|
||||||
LSL_String llKey2Name(string id);
|
LSL_String llKey2Name(string id);
|
||||||
|
void llLinkParticleSystem(int linknum, LSL_List rules);
|
||||||
LSL_String llList2CSV(LSL_List src);
|
LSL_String llList2CSV(LSL_List src);
|
||||||
LSL_Float llList2Float(LSL_List src, int index);
|
LSL_Float llList2Float(LSL_List src, int index);
|
||||||
LSL_Integer llList2Integer(LSL_List src, int index);
|
LSL_Integer llList2Integer(LSL_List src, int index);
|
||||||
|
@ -322,6 +324,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
void llSetLinkColor(int linknumber, LSL_Vector color, int face);
|
void llSetLinkColor(int linknumber, LSL_Vector color, int face);
|
||||||
void llSetLinkPrimitiveParams(int linknumber, LSL_List rules);
|
void llSetLinkPrimitiveParams(int linknumber, LSL_List rules);
|
||||||
void llSetLinkTexture(int linknumber, string texture, int face);
|
void llSetLinkTexture(int linknumber, string texture, int face);
|
||||||
|
void llSetLinkTextureAnim(int linknum, int mode, int face, int sizex, int sizey, double start, double length, double rate);
|
||||||
void llSetLocalRot(LSL_Rotation rot);
|
void llSetLocalRot(LSL_Rotation rot);
|
||||||
void llSetObjectDesc(string desc);
|
void llSetObjectDesc(string desc);
|
||||||
void llSetObjectName(string name);
|
void llSetObjectName(string name);
|
||||||
|
@ -330,6 +333,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
void llSetPayPrice(int price, LSL_List quick_pay_buttons);
|
void llSetPayPrice(int price, LSL_List quick_pay_buttons);
|
||||||
void llSetPos(LSL_Vector pos);
|
void llSetPos(LSL_Vector pos);
|
||||||
void llSetPrimitiveParams(LSL_List rules);
|
void llSetPrimitiveParams(LSL_List rules);
|
||||||
|
void llSetLinkPrimitiveParamsFast(int linknum, LSL_List rules);
|
||||||
void llSetPrimURL(string url);
|
void llSetPrimURL(string url);
|
||||||
void llSetRemoteScriptAccessPin(int pin);
|
void llSetRemoteScriptAccessPin(int pin);
|
||||||
void llSetRot(LSL_Rotation rot);
|
void llSetRot(LSL_Rotation rot);
|
||||||
|
|
|
@ -160,6 +160,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
public const int VEHICLE_BANKING_MIX = 39;
|
public const int VEHICLE_BANKING_MIX = 39;
|
||||||
public const int VEHICLE_BANKING_TIMESCALE = 40;
|
public const int VEHICLE_BANKING_TIMESCALE = 40;
|
||||||
public const int VEHICLE_REFERENCE_FRAME = 44;
|
public const int VEHICLE_REFERENCE_FRAME = 44;
|
||||||
|
public const int VEHICLE_RANGE_BLOCK = 45;
|
||||||
|
public const int VEHICLE_ROLL_FRAME = 46;
|
||||||
public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1;
|
public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1;
|
||||||
public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2;
|
public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2;
|
||||||
public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4;
|
public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4;
|
||||||
|
@ -170,6 +172,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128;
|
public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128;
|
||||||
public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256;
|
public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256;
|
||||||
public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512;
|
public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512;
|
||||||
|
public const int VEHICLE_FLAG_NO_X = 1024;
|
||||||
|
public const int VEHICLE_FLAG_NO_Y = 2048;
|
||||||
|
public const int VEHICLE_FLAG_NO_Z = 4096;
|
||||||
|
public const int VEHICLE_FLAG_LOCK_HOVER_HEIGHT = 8192;
|
||||||
|
public const int VEHICLE_FLAG_NO_DEFLECTION = 16392;
|
||||||
|
public const int VEHICLE_FLAG_LOCK_ROTATION = 32784;
|
||||||
|
|
||||||
public const int INVENTORY_ALL = -1;
|
public const int INVENTORY_ALL = -1;
|
||||||
public const int INVENTORY_NONE = -1;
|
public const int INVENTORY_NONE = -1;
|
||||||
|
@ -305,6 +313,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
public const int PRIM_CAST_SHADOWS = 24; // Not implemented, here for completeness sake
|
public const int PRIM_CAST_SHADOWS = 24; // Not implemented, here for completeness sake
|
||||||
public const int PRIM_POINT_LIGHT = 23; // Huh?
|
public const int PRIM_POINT_LIGHT = 23; // Huh?
|
||||||
public const int PRIM_GLOW = 25;
|
public const int PRIM_GLOW = 25;
|
||||||
|
public const int PRIM_TEXT = 26;
|
||||||
public const int PRIM_TEXGEN_DEFAULT = 0;
|
public const int PRIM_TEXGEN_DEFAULT = 0;
|
||||||
public const int PRIM_TEXGEN_PLANAR = 1;
|
public const int PRIM_TEXGEN_PLANAR = 1;
|
||||||
|
|
||||||
|
|
|
@ -674,6 +674,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
return m_LSL_Functions.llGetPrimitiveParams(rules);
|
return m_LSL_Functions.llGetPrimitiveParams(rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LSL_List llGetLinkPrimitiveParams(int linknum, LSL_List rules)
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llGetLinkPrimitiveParams(linknum, rules);
|
||||||
|
}
|
||||||
|
|
||||||
public LSL_Integer llGetRegionAgentCount()
|
public LSL_Integer llGetRegionAgentCount()
|
||||||
{
|
{
|
||||||
return m_LSL_Functions.llGetRegionAgentCount();
|
return m_LSL_Functions.llGetRegionAgentCount();
|
||||||
|
@ -889,6 +894,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
return m_LSL_Functions.llKey2Name(id);
|
return m_LSL_Functions.llKey2Name(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void llLinkParticleSystem(int linknum, LSL_List rules)
|
||||||
|
{
|
||||||
|
m_LSL_Functions.llLinkParticleSystem(linknum, rules);
|
||||||
|
}
|
||||||
|
|
||||||
public LSL_String llList2CSV(LSL_List src)
|
public LSL_String llList2CSV(LSL_List src)
|
||||||
{
|
{
|
||||||
return m_LSL_Functions.llList2CSV(src);
|
return m_LSL_Functions.llList2CSV(src);
|
||||||
|
@ -1468,6 +1478,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
m_LSL_Functions.llSetLinkTexture(linknumber, texture, face);
|
m_LSL_Functions.llSetLinkTexture(linknumber, texture, face);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void llSetLinkTextureAnim(int linknum, int mode, int face, int sizex, int sizey, double start, double length, double rate)
|
||||||
|
{
|
||||||
|
m_LSL_Functions.llSetLinkTextureAnim(linknum, mode, face, sizex, sizey, start, length, rate);
|
||||||
|
}
|
||||||
|
|
||||||
public void llSetLocalRot(LSL_Rotation rot)
|
public void llSetLocalRot(LSL_Rotation rot)
|
||||||
{
|
{
|
||||||
m_LSL_Functions.llSetLocalRot(rot);
|
m_LSL_Functions.llSetLocalRot(rot);
|
||||||
|
@ -1508,6 +1523,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
m_LSL_Functions.llSetPrimitiveParams(rules);
|
m_LSL_Functions.llSetPrimitiveParams(rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void llSetLinkPrimitiveParamsFast(int linknum, LSL_List rules)
|
||||||
|
{
|
||||||
|
m_LSL_Functions.llSetLinkPrimitiveParamsFast(linknum, rules);
|
||||||
|
}
|
||||||
|
|
||||||
public void llSetPrimURL(string url)
|
public void llSetPrimURL(string url)
|
||||||
{
|
{
|
||||||
m_LSL_Functions.llSetPrimURL(url);
|
m_LSL_Functions.llSetPrimURL(url);
|
||||||
|
|
|
@ -44,8 +44,6 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
{
|
{
|
||||||
public class XInventoryInConnector : ServiceConnector
|
public class XInventoryInConnector : ServiceConnector
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
|
|
||||||
private IInventoryService m_InventoryService;
|
private IInventoryService m_InventoryService;
|
||||||
private string m_ConfigName = "InventoryService";
|
private string m_ConfigName = "InventoryService";
|
||||||
|
|
||||||
|
@ -197,7 +195,7 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
if (!request.ContainsKey("PRINCIPAL"))
|
if (!request.ContainsKey("PRINCIPAL"))
|
||||||
return FailureResult();
|
return FailureResult();
|
||||||
|
|
||||||
if(m_InventoryService.CreateUserInventory(new UUID(request["PRINCIPAL"].ToString())))
|
if (m_InventoryService.CreateUserInventory(new UUID(request["PRINCIPAL"].ToString())))
|
||||||
result["RESULT"] = "True";
|
result["RESULT"] = "True";
|
||||||
else
|
else
|
||||||
result["RESULT"] = "False";
|
result["RESULT"] = "False";
|
||||||
|
|
|
@ -81,12 +81,12 @@ namespace OpenSim.Services.AssetService
|
||||||
}
|
}
|
||||||
|
|
||||||
public AssetBase Get(string id)
|
public AssetBase Get(string id)
|
||||||
{
|
{
|
||||||
UUID assetID;
|
UUID assetID;
|
||||||
|
|
||||||
if (!UUID.TryParse(id, out assetID))
|
if (!UUID.TryParse(id, out assetID))
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[ASSET SERVICE]: Could not parse requested sset id {0}", id);
|
m_log.WarnFormat("[ASSET SERVICE]: Could not parse requested sset id {0}", id);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,7 @@ namespace OpenSim.Services.Connectors
|
||||||
}
|
}
|
||||||
|
|
||||||
public AssetBase Get(string id)
|
public AssetBase Get(string id)
|
||||||
{
|
{
|
||||||
string uri = m_ServerURI + "/assets/" + id;
|
string uri = m_ServerURI + "/assets/" + id;
|
||||||
|
|
||||||
AssetBase asset = null;
|
AssetBase asset = null;
|
||||||
|
|
|
@ -206,6 +206,8 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
public event ObjectBuy OnObjectBuy;
|
public event ObjectBuy OnObjectBuy;
|
||||||
public event BuyObjectInventory OnBuyObjectInventory;
|
public event BuyObjectInventory OnBuyObjectInventory;
|
||||||
public event AgentSit OnUndo;
|
public event AgentSit OnUndo;
|
||||||
|
public event AgentSit OnRedo;
|
||||||
|
public event LandUndo OnLandUndo;
|
||||||
|
|
||||||
public event ForceReleaseControls OnForceReleaseControls;
|
public event ForceReleaseControls OnForceReleaseControls;
|
||||||
|
|
||||||
|
|
|
@ -31,26 +31,26 @@
|
||||||
|
|
||||||
; To run a script every few minutes, set the script filename here
|
; To run a script every few minutes, set the script filename here
|
||||||
; timer_Script = "filename"
|
; timer_Script = "filename"
|
||||||
|
|
||||||
; ##
|
; ##
|
||||||
; ## SYSTEM
|
; ## SYSTEM
|
||||||
; ##
|
; ##
|
||||||
|
|
||||||
; Sets the method that OpenSim will use to fire asynchronous
|
; Sets the method that OpenSim will use to fire asynchronous
|
||||||
; events. Valid values are UnsafeQueueUserWorkItem,
|
; events. Valid values are UnsafeQueueUserWorkItem,
|
||||||
; QueueUserWorkItem, BeginInvoke, SmartThreadPool, and Thread.
|
; QueueUserWorkItem, BeginInvoke, SmartThreadPool, and Thread.
|
||||||
; SmartThreadPool is reported to work well on Mono/Linux, but
|
; SmartThreadPool is reported to work well on Mono/Linux, but
|
||||||
; UnsafeQueueUserWorkItem has been benchmarked with better
|
; UnsafeQueueUserWorkItem has been benchmarked with better
|
||||||
; performance on .NET/Windows
|
; performance on .NET/Windows
|
||||||
async_call_method = SmartThreadPool
|
async_call_method = SmartThreadPool
|
||||||
|
|
||||||
; There are several operations on large collections (such as
|
; There are several operations on large collections (such as
|
||||||
; the current avatar list) that can be run synchronously or
|
; the current avatar list) that can be run synchronously or
|
||||||
; in parallel. Running in parallel should increase performance
|
; in parallel. Running in parallel should increase performance
|
||||||
; on a multi-core system, but will make debugging more
|
; on a multi-core system, but will make debugging more
|
||||||
; difficult if something deadlocks or times out
|
; difficult if something deadlocks or times out
|
||||||
use_async_when_possible = false
|
use_async_when_possible = false
|
||||||
|
|
||||||
; Max threads to allocate on the FireAndForget thread pool
|
; Max threads to allocate on the FireAndForget thread pool
|
||||||
; when running with the SmartThreadPool option above
|
; when running with the SmartThreadPool option above
|
||||||
MaxPoolThreads = 15
|
MaxPoolThreads = 15
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
|
|
||||||
; How many prims to send to each avatar in the scene on each Update()
|
; How many prims to send to each avatar in the scene on each Update()
|
||||||
; MaxPrimsPerFrame = 200
|
; MaxPrimsPerFrame = 200
|
||||||
|
|
||||||
; Combine all contiguous regions into one large region
|
; Combine all contiguous regions into one large region
|
||||||
; Order your regions from South to North, West to East in your regions.ini and then set this to true
|
; Order your regions from South to North, West to East in your regions.ini and then set this to true
|
||||||
; Warning! Don't use this with regions that have existing content!, This will likely break them
|
; Warning! Don't use this with regions that have existing content!, This will likely break them
|
||||||
|
@ -351,7 +351,7 @@
|
||||||
http_listener_ssl_cert = "" ; Currently unused, but will be used for OSHttpServer
|
http_listener_ssl_cert = "" ; Currently unused, but will be used for OSHttpServer
|
||||||
|
|
||||||
; Hostname to use in llRequestURL/llRequestSecureURL
|
; Hostname to use in llRequestURL/llRequestSecureURL
|
||||||
; if not defined - default machine name is being used
|
; if not defined - default machine name is being used
|
||||||
; (on Windows this mean NETBIOS name - useably only inside local network)
|
; (on Windows this mean NETBIOS name - useably only inside local network)
|
||||||
; ExternalHostNameForLSL=127.0.0.1
|
; ExternalHostNameForLSL=127.0.0.1
|
||||||
; Uncomment below to enable llRemoteData/remote channels
|
; Uncomment below to enable llRemoteData/remote channels
|
||||||
|
@ -388,11 +388,11 @@
|
||||||
[ClientStack.LindenUDP]
|
[ClientStack.LindenUDP]
|
||||||
; Set this to true to process incoming packets asynchronously. Networking is
|
; Set this to true to process incoming packets asynchronously. Networking is
|
||||||
; already separated from packet handling with a queue, so this will only
|
; already separated from packet handling with a queue, so this will only
|
||||||
; affect whether networking internals such as packet decoding and
|
; affect whether networking internals such as packet decoding and
|
||||||
; acknowledgement accounting are done synchronously or asynchronously
|
; acknowledgement accounting are done synchronously or asynchronously
|
||||||
;
|
;
|
||||||
;async_packet_handling = false
|
;async_packet_handling = false
|
||||||
|
|
||||||
; The client socket receive buffer size determines how many
|
; The client socket receive buffer size determines how many
|
||||||
; incoming requests we can process; the default on .NET is 8192
|
; incoming requests we can process; the default on .NET is 8192
|
||||||
; which is about 2 4k-sized UDP datagrams. On mono this is
|
; which is about 2 4k-sized UDP datagrams. On mono this is
|
||||||
|
@ -409,7 +409,7 @@
|
||||||
; net.core.rmem_max=X")
|
; net.core.rmem_max=X")
|
||||||
;
|
;
|
||||||
;client_socket_rcvbuf_size = 8388608
|
;client_socket_rcvbuf_size = 8388608
|
||||||
|
|
||||||
; Maximum outbound bytes per second for a single scene. This can be used to
|
; Maximum outbound bytes per second for a single scene. This can be used to
|
||||||
; throttle total outbound UDP traffic for a simulator. The default value is
|
; throttle total outbound UDP traffic for a simulator. The default value is
|
||||||
; 0, meaning no throttling at the scene level. The example given here is
|
; 0, meaning no throttling at the scene level. The example given here is
|
||||||
|
@ -417,13 +417,13 @@
|
||||||
;
|
;
|
||||||
;scene_throttle_max_bps = 2621440
|
;scene_throttle_max_bps = 2621440
|
||||||
|
|
||||||
; Maximum bits per second to send to any single client. This will override
|
; Maximum bits per second to send to any single client. This will override
|
||||||
; the user's viewer preference settings. The default value is 0, meaning no
|
; the user's viewer preference settings. The default value is 0, meaning no
|
||||||
; aggregate throttling on clients (only per-category throttling). The
|
; aggregate throttling on clients (only per-category throttling). The
|
||||||
; example given here is 1.5 megabits
|
; example given here is 1.5 megabits
|
||||||
;
|
;
|
||||||
;client_throttle_max_bps = 196608
|
;client_throttle_max_bps = 196608
|
||||||
|
|
||||||
; Per-client bytes per second rates for the various throttle categories.
|
; Per-client bytes per second rates for the various throttle categories.
|
||||||
; These are default values that will be overriden by clients
|
; These are default values that will be overriden by clients
|
||||||
;
|
;
|
||||||
|
@ -435,7 +435,7 @@
|
||||||
;texture_default = 1000
|
;texture_default = 1000
|
||||||
;asset_default = 1000
|
;asset_default = 1000
|
||||||
;state_default = 1000
|
;state_default = 1000
|
||||||
|
|
||||||
; Per-client maximum burst rates in bytes per second for the various
|
; Per-client maximum burst rates in bytes per second for the various
|
||||||
; throttle categories. These are default values that will be overriden by
|
; throttle categories. These are default values that will be overriden by
|
||||||
; clients
|
; clients
|
||||||
|
@ -448,10 +448,10 @@
|
||||||
;texture_limit = 55750
|
;texture_limit = 55750
|
||||||
;asset_limit = 27500
|
;asset_limit = 27500
|
||||||
;state_limit = 37000
|
;state_limit = 37000
|
||||||
|
|
||||||
; Configures how ObjectUpdates are aggregated. These numbers
|
; Configures how ObjectUpdates are aggregated. These numbers
|
||||||
; do not literally mean how many updates will be put in each
|
; do not literally mean how many updates will be put in each
|
||||||
; packet that goes over the wire, as packets are
|
; packet that goes over the wire, as packets are
|
||||||
; automatically split on a 1400 byte boundary. These control
|
; automatically split on a 1400 byte boundary. These control
|
||||||
; the balance between responsiveness of interest list updates
|
; the balance between responsiveness of interest list updates
|
||||||
; and total throughput. Higher numbers will ensure more full-
|
; and total throughput. Higher numbers will ensure more full-
|
||||||
|
@ -612,7 +612,7 @@
|
||||||
; used to control llMove2Target
|
; used to control llMove2Target
|
||||||
body_pid_derivative = 35
|
body_pid_derivative = 35
|
||||||
body_pid_gain = 25
|
body_pid_gain = 25
|
||||||
|
|
||||||
; maximum number of contact points to generate per collision
|
; maximum number of contact points to generate per collision
|
||||||
contacts_per_collision = 80
|
contacts_per_collision = 80
|
||||||
|
|
||||||
|
@ -801,7 +801,7 @@
|
||||||
;;arrival and departure of certain users. For example: admins, bots.
|
;;arrival and departure of certain users. For example: admins, bots.
|
||||||
|
|
||||||
;exclude_list=User 1,User 2,User 3
|
;exclude_list=User 1,User 2,User 3
|
||||||
|
|
||||||
|
|
||||||
;[CMS]
|
;[CMS]
|
||||||
;enabled = true
|
;enabled = true
|
||||||
|
@ -984,7 +984,7 @@
|
||||||
|
|
||||||
; Stack size per thread created
|
; Stack size per thread created
|
||||||
ThreadStackSize = 262144
|
ThreadStackSize = 262144
|
||||||
|
|
||||||
; Set this to true (the default) to load each script into a separate
|
; Set this to true (the default) to load each script into a separate
|
||||||
; AppDomain. Setting this to false will load all script assemblies into the
|
; AppDomain. Setting this to false will load all script assemblies into the
|
||||||
; current AppDomain, which will reduce the per-script overhead at the
|
; current AppDomain, which will reduce the per-script overhead at the
|
||||||
|
@ -1179,25 +1179,25 @@
|
||||||
; Enables the Mini Region Modules Script Engine.
|
; Enables the Mini Region Modules Script Engine.
|
||||||
; default is false
|
; default is false
|
||||||
Enabled = false
|
Enabled = false
|
||||||
|
|
||||||
; Runs MRM in a Security Sandbox
|
; Runs MRM in a Security Sandbox
|
||||||
; WARNING: DISABLING IS A SECURITY RISK.
|
; WARNING: DISABLING IS A SECURITY RISK.
|
||||||
Sandboxed = true
|
Sandboxed = true
|
||||||
|
|
||||||
; The level sandbox to use, adjust at your OWN RISK.
|
; The level sandbox to use, adjust at your OWN RISK.
|
||||||
; Valid values are:
|
; Valid values are:
|
||||||
; * FullTrust
|
; * FullTrust
|
||||||
; * SkipVerification
|
; * SkipVerification
|
||||||
; * Execution
|
; * Execution
|
||||||
; * Nothing
|
; * Nothing
|
||||||
; * LocalIntranet
|
; * LocalIntranet
|
||||||
; * Internet
|
; * Internet
|
||||||
; * Everything
|
; * Everything
|
||||||
SandboxLevel = "Internet"
|
SandboxLevel = "Internet"
|
||||||
|
|
||||||
; Only allow Region Owners to run MRMs
|
; Only allow Region Owners to run MRMs
|
||||||
; May represent a security risk if you disable this.
|
; May represent a security risk if you disable this.
|
||||||
OwnerOnly = true
|
OwnerOnly = true
|
||||||
|
|
||||||
[Hypergrid]
|
[Hypergrid]
|
||||||
; Keep it false for now. Making it true requires the use of a special client in order to access inventory
|
; Keep it false for now. Making it true requires the use of a special client in order to access inventory
|
||||||
|
@ -1347,7 +1347,7 @@
|
||||||
|
|
||||||
[WebStats]
|
[WebStats]
|
||||||
; View region statistics via a web page
|
; View region statistics via a web page
|
||||||
; See http://opensimulator.org/wiki/FAQ#Region_Statistics_on_a_Web_Page
|
; See http://opensimulator.org/wiki/FAQ#Region_Statistics_on_a_Web_Page
|
||||||
; Use a web browser and type in the "Login URI" + "/SStats/"
|
; Use a web browser and type in the "Login URI" + "/SStats/"
|
||||||
; For example- http://127.0.0.1:9000/SStats/
|
; For example- http://127.0.0.1:9000/SStats/
|
||||||
; enabled=false
|
; enabled=false
|
||||||
|
@ -1369,14 +1369,14 @@
|
||||||
[AssetService]
|
[AssetService]
|
||||||
DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
|
DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
|
||||||
AssetLoaderArgs = "assets/AssetSets.xml"
|
AssetLoaderArgs = "assets/AssetSets.xml"
|
||||||
|
|
||||||
; Disable this to prevent the default asset set from being inserted into the
|
; Disable this to prevent the default asset set from being inserted into the
|
||||||
; asset store each time the region starts
|
; asset store each time the region starts
|
||||||
AssetLoaderEnabled = true
|
AssetLoaderEnabled = true
|
||||||
|
|
||||||
[GridService]
|
[GridService]
|
||||||
;; default standalone, overridable in StandaloneCommon.ini
|
;; default standalone, overridable in StandaloneCommon.ini
|
||||||
StorageProvider = "OpenSim.Data.Null.dll:NullRegionData"
|
StorageProvider = "OpenSim.Data.Null.dll:NullRegionData"
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; The following is the configuration section for the new style services
|
;; The following is the configuration section for the new style services
|
||||||
|
|
|
@ -20,11 +20,10 @@
|
||||||
|
|
||||||
[InventoryService]
|
[InventoryService]
|
||||||
LocalServiceModule = "OpenSim.Services.InventoryService.dll:InventoryService"
|
LocalServiceModule = "OpenSim.Services.InventoryService.dll:InventoryService"
|
||||||
|
|
||||||
[AuthorizationService]
|
[AuthorizationService]
|
||||||
LocalServiceModule = "OpenSim.Services.AuthorizationService.dll:AuthorizationService"
|
LocalServiceModule = "OpenSim.Services.AuthorizationService.dll:AuthorizationService"
|
||||||
|
|
||||||
[GridService]
|
[GridService]
|
||||||
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
||||||
Realm = "regions"
|
Realm = "regions"
|
||||||
|
|
||||||
|
|
51
prebuild.xml
51
prebuild.xml
|
@ -533,7 +533,7 @@
|
||||||
<Reference name="OpenSim.Framework"/>
|
<Reference name="OpenSim.Framework"/>
|
||||||
<Reference name="OpenSim.Framework.Console"/>
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
<Reference name="OpenSim.Region.Physics.Manager"/>
|
<Reference name="OpenSim.Region.Physics.Manager"/>
|
||||||
<Reference name="Ode.NET.dll" />
|
<Reference name="Ode.NET.dll" />
|
||||||
<Reference name="log4net.dll"/>
|
<Reference name="log4net.dll"/>
|
||||||
|
|
||||||
<Files>
|
<Files>
|
||||||
|
@ -601,8 +601,6 @@
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.Meshing" path="OpenSim/Region/Physics/Meshing" type="Library">
|
<Project frameworkVersion="v3_5" name="OpenSim.Region.Physics.Meshing" path="OpenSim/Region/Physics/Meshing" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
|
@ -1318,7 +1316,7 @@
|
||||||
<Match pattern="*.cs" recurse="true"/>
|
<Match pattern="*.cs" recurse="true"/>
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
<Project frameworkVersion="v3_5" name="OpenSim.Services.AuthorizationService" path="OpenSim/Services/AuthorizationService" type="Library">
|
<Project frameworkVersion="v3_5" name="OpenSim.Services.AuthorizationService" path="OpenSim/Services/AuthorizationService" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
|
@ -1649,7 +1647,7 @@
|
||||||
<Reference name="OpenSim.Region.Physics.Manager"/>
|
<Reference name="OpenSim.Region.Physics.Manager"/>
|
||||||
|
|
||||||
<Reference name="GlynnTucker.Cache.dll"/>
|
<Reference name="GlynnTucker.Cache.dll"/>
|
||||||
|
|
||||||
<!-- For scripting in funny languages by default -->
|
<!-- For scripting in funny languages by default -->
|
||||||
<Reference name="Microsoft.JScript"/>
|
<Reference name="Microsoft.JScript"/>
|
||||||
<Reference name="XMLRPC.dll"/>
|
<Reference name="XMLRPC.dll"/>
|
||||||
|
@ -1657,8 +1655,8 @@
|
||||||
<Reference name="Nini.dll" />
|
<Reference name="Nini.dll" />
|
||||||
<Reference name="log4net.dll"/>
|
<Reference name="log4net.dll"/>
|
||||||
<Reference name="DotNetOpenMail.dll"/>
|
<Reference name="DotNetOpenMail.dll"/>
|
||||||
|
|
||||||
<!-- To allow regions to have mono addins -->
|
<!-- To allow regions to have mono addins -->
|
||||||
<Reference name="Mono.Addins.dll" />
|
<Reference name="Mono.Addins.dll" />
|
||||||
|
|
||||||
<Files>
|
<Files>
|
||||||
|
@ -1741,7 +1739,6 @@
|
||||||
<Reference name="log4net.dll"/>
|
<Reference name="log4net.dll"/>
|
||||||
<Reference name="DotNetOpenMail.dll"/>
|
<Reference name="DotNetOpenMail.dll"/>
|
||||||
|
|
||||||
|
|
||||||
<Files>
|
<Files>
|
||||||
<Match pattern="*.cs" recurse="true">
|
<Match pattern="*.cs" recurse="true">
|
||||||
<Exclude name="Tests" pattern="Tests" />
|
<Exclude name="Tests" pattern="Tests" />
|
||||||
|
@ -1750,8 +1747,7 @@
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
<Project frameworkVersion="v3_5" name="OpenSim.Region.RegionCombinerModule" path="OpenSim/Region/RegionCombinerModule" type="Library">
|
||||||
<Project frameworkVersion="v3_5" name="OpenSim.Region.RegionCombinerModule" path="OpenSim/Region/RegionCombinerModule" type="Library">
|
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
<OutputPath>../../../bin/</OutputPath>
|
<OutputPath>../../../bin/</OutputPath>
|
||||||
|
@ -1779,8 +1775,8 @@
|
||||||
<Reference name="OpenSim.Region.CoreModules" />
|
<Reference name="OpenSim.Region.CoreModules" />
|
||||||
<Reference name="Nini.dll" />
|
<Reference name="Nini.dll" />
|
||||||
<Reference name="log4net.dll"/>
|
<Reference name="log4net.dll"/>
|
||||||
|
|
||||||
<!-- To allow regions to have mono addins -->
|
<!-- To allow regions to have mono addins -->
|
||||||
<Reference name="Mono.Addins.dll" />
|
<Reference name="Mono.Addins.dll" />
|
||||||
|
|
||||||
<Files>
|
<Files>
|
||||||
|
@ -1789,9 +1785,6 @@
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<Project frameworkVersion="v3_5" name="OpenSim.Region.Communications.Hypergrid" path="OpenSim/Region/Communications/Hypergrid" type="Library">
|
<Project frameworkVersion="v3_5" name="OpenSim.Region.Communications.Hypergrid" path="OpenSim/Region/Communications/Hypergrid" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
|
@ -2304,11 +2297,9 @@
|
||||||
<Match pattern="*.cs" recurse="true"/>
|
<Match pattern="*.cs" recurse="true"/>
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
<!-- Client Stack Modules -->
|
||||||
<!-- Client Stack Modules -->
|
|
||||||
|
|
||||||
|
|
||||||
<Project frameworkVersion="v3_5" name="OpenSim.Client.MXP" path="OpenSim/Client/MXP" type="Library">
|
<Project frameworkVersion="v3_5" name="OpenSim.Client.MXP" path="OpenSim/Client/MXP" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
|
@ -2357,10 +2348,10 @@
|
||||||
<Reference name="OpenMetaverseTypes.dll"/>
|
<Reference name="OpenMetaverseTypes.dll"/>
|
||||||
<Reference name="OpenMetaverse.dll"/>
|
<Reference name="OpenMetaverse.dll"/>
|
||||||
<Reference name="System"/>
|
<Reference name="System"/>
|
||||||
<Reference name="System.Drawing"/>
|
<Reference name="System.Drawing"/>
|
||||||
<Reference name="OpenSim.Framework"/>
|
<Reference name="OpenSim.Framework"/>
|
||||||
<Reference name="OpenSim.Framework.Servers"/>
|
<Reference name="OpenSim.Framework.Servers"/>
|
||||||
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
||||||
<Reference name="OpenSim.Region.Framework"/>
|
<Reference name="OpenSim.Region.Framework"/>
|
||||||
<Reference name="OpenSim.Framework.Communications"/>
|
<Reference name="OpenSim.Framework.Communications"/>
|
||||||
<Reference name="OpenSim.Services.Interfaces"/>
|
<Reference name="OpenSim.Services.Interfaces"/>
|
||||||
|
@ -2402,7 +2393,7 @@
|
||||||
<Match pattern="*.cs" recurse="true"/>
|
<Match pattern="*.cs" recurse="true"/>
|
||||||
</Files>
|
</Files>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
<Project frameworkVersion="v3_5" name="OpenSim.Client.Linden" path="OpenSim/Client/Linden" type="Library">
|
<Project frameworkVersion="v3_5" name="OpenSim.Client.Linden" path="OpenSim/Client/Linden" type="Library">
|
||||||
<Configuration name="Debug">
|
<Configuration name="Debug">
|
||||||
<Options>
|
<Options>
|
||||||
|
@ -3052,7 +3043,7 @@
|
||||||
<ReferencePath>../../../bin/</ReferencePath>
|
<ReferencePath>../../../bin/</ReferencePath>
|
||||||
<Reference name="System"/>
|
<Reference name="System"/>
|
||||||
<Reference name="System.Xml"/>
|
<Reference name="System.Xml"/>
|
||||||
<Reference name="System.Core"/>
|
<Reference name="System.Core"/>
|
||||||
<Reference name="System.Drawing"/>
|
<Reference name="System.Drawing"/>
|
||||||
<Reference name="System.Data"/>
|
<Reference name="System.Data"/>
|
||||||
<Reference name="OpenMetaverse.dll"/>
|
<Reference name="OpenMetaverse.dll"/>
|
||||||
|
@ -3061,7 +3052,7 @@
|
||||||
<Reference name="OpenSim.Data"/>
|
<Reference name="OpenSim.Data"/>
|
||||||
<Reference name="OpenSim.Region.Framework"/>
|
<Reference name="OpenSim.Region.Framework"/>
|
||||||
<Reference name="OpenSim.Region.CoreModules"/>
|
<Reference name="OpenSim.Region.CoreModules"/>
|
||||||
<Reference name="OpenSim.Tests.Common"/>
|
<Reference name="OpenSim.Tests.Common"/>
|
||||||
<Reference name="log4net.dll"/>
|
<Reference name="log4net.dll"/>
|
||||||
<Reference name="Mono.Addins.dll" />
|
<Reference name="Mono.Addins.dll" />
|
||||||
<Reference name="nunit.framework.dll" />
|
<Reference name="nunit.framework.dll" />
|
||||||
|
@ -3302,7 +3293,7 @@
|
||||||
<Reference name="OpenSim.Region.CoreModules"/>
|
<Reference name="OpenSim.Region.CoreModules"/>
|
||||||
<Reference name="OpenSim.Region.Physics.Manager"/>
|
<Reference name="OpenSim.Region.Physics.Manager"/>
|
||||||
<Reference name="OpenSim.Services.Interfaces"/>
|
<Reference name="OpenSim.Services.Interfaces"/>
|
||||||
|
|
||||||
<!-- Unit tests -->
|
<!-- Unit tests -->
|
||||||
<Reference name="OpenSim.Tests.Common"/>
|
<Reference name="OpenSim.Tests.Common"/>
|
||||||
<Reference name="Nini.dll"/>
|
<Reference name="Nini.dll"/>
|
||||||
|
@ -3562,9 +3553,3 @@
|
||||||
|
|
||||||
</Solution>
|
</Solution>
|
||||||
</Prebuild>
|
</Prebuild>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue