Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim
commit
e746840226
|
@ -297,7 +297,6 @@ namespace OpenSim.Data.Tests
|
||||||
pbshap.ProfileEnd = ushort.MaxValue;
|
pbshap.ProfileEnd = ushort.MaxValue;
|
||||||
pbshap.ProfileHollow = ushort.MaxValue;
|
pbshap.ProfileHollow = ushort.MaxValue;
|
||||||
Vector3 scale = new Vector3(random.Next(),random.Next(),random.Next());
|
Vector3 scale = new Vector3(random.Next(),random.Next(),random.Next());
|
||||||
byte updatef = (byte) random.Next(127);
|
|
||||||
|
|
||||||
RegionInfo regionInfo = new RegionInfo();
|
RegionInfo regionInfo = new RegionInfo();
|
||||||
regionInfo.RegionID = region3;
|
regionInfo.RegionID = region3;
|
||||||
|
@ -336,7 +335,6 @@ namespace OpenSim.Data.Tests
|
||||||
sop.LinkNum = linknum;
|
sop.LinkNum = linknum;
|
||||||
sop.ClickAction = clickaction;
|
sop.ClickAction = clickaction;
|
||||||
sop.Scale = scale;
|
sop.Scale = scale;
|
||||||
sop.UpdateFlag = updatef;
|
|
||||||
|
|
||||||
//Tests if local part accepted the parameters:
|
//Tests if local part accepted the parameters:
|
||||||
Assert.That(regionh,Is.EqualTo(sop.RegionHandle), "Assert.That(regionh,Is.EqualTo(sop.RegionHandle))");
|
Assert.That(regionh,Is.EqualTo(sop.RegionHandle), "Assert.That(regionh,Is.EqualTo(sop.RegionHandle))");
|
||||||
|
@ -369,7 +367,6 @@ namespace OpenSim.Data.Tests
|
||||||
Assert.That(linknum,Is.EqualTo(sop.LinkNum), "Assert.That(linknum,Is.EqualTo(sop.LinkNum))");
|
Assert.That(linknum,Is.EqualTo(sop.LinkNum), "Assert.That(linknum,Is.EqualTo(sop.LinkNum))");
|
||||||
Assert.That(clickaction,Is.EqualTo(sop.ClickAction), "Assert.That(clickaction,Is.EqualTo(sop.ClickAction))");
|
Assert.That(clickaction,Is.EqualTo(sop.ClickAction), "Assert.That(clickaction,Is.EqualTo(sop.ClickAction))");
|
||||||
Assert.That(scale,Is.EqualTo(sop.Scale), "Assert.That(scale,Is.EqualTo(sop.Scale))");
|
Assert.That(scale,Is.EqualTo(sop.Scale), "Assert.That(scale,Is.EqualTo(sop.Scale))");
|
||||||
Assert.That(updatef,Is.EqualTo(sop.UpdateFlag), "Assert.That(updatef,Is.EqualTo(sop.UpdateFlag))");
|
|
||||||
|
|
||||||
// This is necessary or object will not be inserted in DB
|
// This is necessary or object will not be inserted in DB
|
||||||
sop.Flags = PrimFlags.None;
|
sop.Flags = PrimFlags.None;
|
||||||
|
@ -469,7 +466,6 @@ namespace OpenSim.Data.Tests
|
||||||
PrimitiveBaseShape pbshap = new PrimitiveBaseShape();
|
PrimitiveBaseShape pbshap = new PrimitiveBaseShape();
|
||||||
pbshap = PrimitiveBaseShape.Default;
|
pbshap = PrimitiveBaseShape.Default;
|
||||||
Vector3 scale = new Vector3(random.Next(),random.Next(),random.Next());
|
Vector3 scale = new Vector3(random.Next(),random.Next(),random.Next());
|
||||||
byte updatef = (byte) random.Next(127);
|
|
||||||
|
|
||||||
// Updates the region with new values
|
// Updates the region with new values
|
||||||
SceneObjectGroup sog2 = FindSOG("Adam West", region3);
|
SceneObjectGroup sog2 = FindSOG("Adam West", region3);
|
||||||
|
@ -499,7 +495,6 @@ namespace OpenSim.Data.Tests
|
||||||
sog2.RootPart.LinkNum = linknum;
|
sog2.RootPart.LinkNum = linknum;
|
||||||
sog2.RootPart.ClickAction = clickaction;
|
sog2.RootPart.ClickAction = clickaction;
|
||||||
sog2.RootPart.Scale = scale;
|
sog2.RootPart.Scale = scale;
|
||||||
sog2.RootPart.UpdateFlag = updatef;
|
|
||||||
|
|
||||||
db.StoreObject(sog2, region3);
|
db.StoreObject(sog2, region3);
|
||||||
List<SceneObjectGroup> sogs = db.LoadObjects(region3);
|
List<SceneObjectGroup> sogs = db.LoadObjects(region3);
|
||||||
|
|
|
@ -332,7 +332,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
grp.IsAttachment = false;
|
grp.IsAttachment = false;
|
||||||
// Required for linking
|
// Required for linking
|
||||||
grp.RootPart.UpdateFlag = 0;
|
grp.RootPart.ClearUpdateSchedule();
|
||||||
|
|
||||||
if (m_scene.Permissions.CanRezObject(1, avatar.UUID, pos))
|
if (m_scene.Permissions.CanRezObject(1, avatar.UUID, pos))
|
||||||
{
|
{
|
||||||
|
@ -345,8 +345,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
for (int j = 1; j < allparts.Length; j++)
|
for (int j = 1; j < allparts.Length; j++)
|
||||||
{
|
{
|
||||||
rootGroup.RootPart.UpdateFlag = 0;
|
// Required for linking
|
||||||
allparts[j].RootPart.UpdateFlag = 0;
|
rootGroup.RootPart.ClearUpdateSchedule();
|
||||||
|
allparts[j].RootPart.ClearUpdateSchedule();
|
||||||
rootGroup.LinkToGroup(allparts[j]);
|
rootGroup.LinkToGroup(allparts[j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -169,6 +169,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
|
|
||||||
public bool SendAppearance(UUID agentId)
|
public bool SendAppearance(UUID agentId)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[AVFACTORY]: Sending appearance for {0}", agentId);
|
||||||
|
|
||||||
ScenePresence sp = m_scene.GetScenePresence(agentId);
|
ScenePresence sp = m_scene.GetScenePresence(agentId);
|
||||||
if (sp == null)
|
if (sp == null)
|
||||||
{
|
{
|
||||||
|
@ -257,7 +259,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void QueueAppearanceSend(UUID agentid)
|
public void QueueAppearanceSend(UUID agentid)
|
||||||
{
|
{
|
||||||
// m_log.WarnFormat("[AVFACTORY]: Queue appearance send for {0}", agentid);
|
// m_log.DebugFormat("[AVFACTORY]: Queue appearance send for {0}", agentid);
|
||||||
|
|
||||||
// 10000 ticks per millisecond, 1000 milliseconds per second
|
// 10000 ticks per millisecond, 1000 milliseconds per second
|
||||||
long timestamp = DateTime.Now.Ticks + Convert.ToInt64(m_sendtime * 1000 * 10000);
|
long timestamp = DateTime.Now.Ticks + Convert.ToInt64(m_sendtime * 1000 * 10000);
|
||||||
|
@ -393,10 +395,17 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
Dictionary<UUID, long> sends = new Dictionary<UUID, long>(m_sendqueue);
|
Dictionary<UUID, long> sends = new Dictionary<UUID, long>(m_sendqueue);
|
||||||
foreach (KeyValuePair<UUID, long> kvp in sends)
|
foreach (KeyValuePair<UUID, long> kvp in sends)
|
||||||
{
|
{
|
||||||
if (kvp.Value < now)
|
// We have to load the key and value into local parameters to avoid a race condition if we loop
|
||||||
|
// around and load kvp with a different value before FireAndForget has launched its thread.
|
||||||
|
UUID avatarID = kvp.Key;
|
||||||
|
long sendTime = kvp.Value;
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[AVFACTORY]: Handling queued appearance updates for {0}, update delta to now is {1}", avatarID, sendTime - now);
|
||||||
|
|
||||||
|
if (sendTime < now)
|
||||||
{
|
{
|
||||||
Util.FireAndForget(delegate(object o) { SendAppearance(kvp.Key); });
|
Util.FireAndForget(o => SendAppearance(avatarID));
|
||||||
m_sendqueue.Remove(kvp.Key);
|
m_sendqueue.Remove(avatarID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -406,10 +415,15 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
Dictionary<UUID, long> saves = new Dictionary<UUID, long>(m_savequeue);
|
Dictionary<UUID, long> saves = new Dictionary<UUID, long>(m_savequeue);
|
||||||
foreach (KeyValuePair<UUID, long> kvp in saves)
|
foreach (KeyValuePair<UUID, long> kvp in saves)
|
||||||
{
|
{
|
||||||
if (kvp.Value < now)
|
// We have to load the key and value into local parameters to avoid a race condition if we loop
|
||||||
|
// around and load kvp with a different value before FireAndForget has launched its thread.
|
||||||
|
UUID avatarID = kvp.Key;
|
||||||
|
long sendTime = kvp.Value;
|
||||||
|
|
||||||
|
if (sendTime < now)
|
||||||
{
|
{
|
||||||
Util.FireAndForget(delegate(object o) { SaveAppearance(kvp.Key); });
|
Util.FireAndForget(o => SaveAppearance(avatarID));
|
||||||
m_savequeue.Remove(kvp.Key);
|
m_savequeue.Remove(avatarID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1714,7 +1714,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
//m_log.Debug(" >>> CrossPrimGroupIntoNewRegion <<<");
|
//m_log.Debug(" >>> CrossPrimGroupIntoNewRegion <<<");
|
||||||
|
|
||||||
bool successYN = false;
|
bool successYN = false;
|
||||||
grp.RootPart.UpdateFlag = 0;
|
grp.RootPart.ClearUpdateSchedule();
|
||||||
//int primcrossingXMLmethod = 0;
|
//int primcrossingXMLmethod = 0;
|
||||||
|
|
||||||
if (destination != null)
|
if (destination != null)
|
||||||
|
|
|
@ -395,9 +395,11 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture
|
||||||
{
|
{
|
||||||
result = OpenJPEG.EncodeFromImage(joint, true);
|
result = OpenJPEG.EncodeFromImage(joint, true);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Error("[DYNAMICTEXTUREMODULE]: OpenJpeg Encode Failed. Empty byte data returned!");
|
m_log.ErrorFormat(
|
||||||
|
"[DYNAMICTEXTUREMODULE]: OpenJpeg Encode Failed. Exception {0}{1}",
|
||||||
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -338,10 +338,11 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
|
||||||
{
|
{
|
||||||
imageJ2000 = OpenJPEG.EncodeFromImage(bitmap, true);
|
imageJ2000 = OpenJPEG.EncodeFromImage(bitmap, true);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.Error(
|
m_log.ErrorFormat(
|
||||||
"[VECTORRENDERMODULE]: OpenJpeg Encode Failed. Empty byte data returned!");
|
"[VECTORRENDERMODULE]: OpenJpeg Encode Failed. Exception {0}{1}",
|
||||||
|
e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_textureManager.ReturnData(id, imageJ2000);
|
m_textureManager.ReturnData(id, imageJ2000);
|
||||||
|
|
|
@ -1799,7 +1799,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
newSet.RemoveAt(0);
|
newSet.RemoveAt(0);
|
||||||
|
|
||||||
foreach (SceneObjectPart newChild in newSet)
|
foreach (SceneObjectPart newChild in newSet)
|
||||||
newChild.UpdateFlag = 0;
|
newChild.ClearUpdateSchedule();
|
||||||
|
|
||||||
LinkObjects(newRoot, newSet);
|
LinkObjects(newRoot, newSet);
|
||||||
if (!affectedGroups.Contains(newRoot.ParentGroup))
|
if (!affectedGroups.Contains(newRoot.ParentGroup))
|
||||||
|
|
|
@ -1157,7 +1157,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
{
|
{
|
||||||
part.UpdateFlag = 0;
|
part.ClearUpdateSchedule();
|
||||||
if (part == m_rootPart)
|
if (part == m_rootPart)
|
||||||
{
|
{
|
||||||
if (!IsAttachment || (AttachedAvatar == avatar.ControllingClient.AgentId) ||
|
if (!IsAttachment || (AttachedAvatar == avatar.ControllingClient.AgentId) ||
|
||||||
|
@ -1735,13 +1735,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f))
|
if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f))
|
||||||
{
|
{
|
||||||
m_rootPart.UpdateFlag = 1;
|
m_rootPart.UpdateFlag = UpdateRequired.TERSE;
|
||||||
lastPhysGroupPos = AbsolutePosition;
|
lastPhysGroupPos = AbsolutePosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f))
|
if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f))
|
||||||
{
|
{
|
||||||
m_rootPart.UpdateFlag = 1;
|
m_rootPart.UpdateFlag = UpdateRequired.TERSE;
|
||||||
lastPhysGroupRot = GroupRotation;
|
lastPhysGroupRot = GroupRotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -106,6 +106,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SCULPT = 7
|
SCULPT = 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum UpdateRequired : byte
|
||||||
|
{
|
||||||
|
NONE = 0,
|
||||||
|
TERSE = 1,
|
||||||
|
FULL = 2
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Enumerations
|
#endregion Enumerations
|
||||||
|
|
||||||
public class SceneObjectPart : IScriptHost, ISceneEntity
|
public class SceneObjectPart : IScriptHost, ISceneEntity
|
||||||
|
@ -254,15 +261,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
private bool m_passTouches;
|
private bool m_passTouches;
|
||||||
|
|
||||||
/// <summary>
|
private UpdateRequired m_updateFlag;
|
||||||
/// Only used internally to schedule client updates.
|
|
||||||
/// 0 - no update is scheduled
|
|
||||||
/// 1 - terse update scheduled
|
|
||||||
/// 2 - full update scheduled
|
|
||||||
///
|
|
||||||
/// TODO - This should be an enumeration
|
|
||||||
/// </summary>
|
|
||||||
private byte m_updateFlag;
|
|
||||||
|
|
||||||
private PhysicsActor m_physActor;
|
private PhysicsActor m_physActor;
|
||||||
protected Vector3 m_acceleration;
|
protected Vector3 m_acceleration;
|
||||||
|
@ -884,7 +883,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary></summary>
|
/// <summary>Update angular velocity and schedule terse update.</summary>
|
||||||
|
public void UpdateAngularVelocity(Vector3 avel)
|
||||||
|
{
|
||||||
|
AngularVelocity = avel;
|
||||||
|
ScheduleTerseUpdate();
|
||||||
|
ParentGroup.HasGroupChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Get or set angular velocity. Does not schedule update.</summary>
|
||||||
public Vector3 AngularVelocity
|
public Vector3 AngularVelocity
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -1024,7 +1031,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte UpdateFlag
|
public UpdateRequired UpdateFlag
|
||||||
{
|
{
|
||||||
get { return m_updateFlag; }
|
get { return m_updateFlag; }
|
||||||
set { m_updateFlag = value; }
|
set { m_updateFlag = value; }
|
||||||
|
@ -1309,9 +1316,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Clear all pending updates of parts to clients
|
/// Clear all pending updates of parts to clients
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void ClearUpdateSchedule()
|
public void ClearUpdateSchedule()
|
||||||
{
|
{
|
||||||
m_updateFlag = 0;
|
UpdateFlag = UpdateRequired.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -2829,7 +2836,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
TimeStampFull = (uint)timeNow;
|
TimeStampFull = (uint)timeNow;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_updateFlag = 2;
|
UpdateFlag = UpdateRequired.FULL;
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT PART]: Scheduling full update for {0}, {1} at {2}",
|
// "[SCENE OBJECT PART]: Scheduling full update for {0}, {1} at {2}",
|
||||||
|
@ -2845,13 +2852,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (m_parentGroup == null)
|
if (m_parentGroup == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m_updateFlag < 1)
|
if (UpdateFlag == UpdateRequired.NONE)
|
||||||
{
|
{
|
||||||
m_parentGroup.HasGroupChanged = true;
|
m_parentGroup.HasGroupChanged = true;
|
||||||
m_parentGroup.QueueForUpdateCheck();
|
m_parentGroup.QueueForUpdateCheck();
|
||||||
|
|
||||||
TimeStampTerse = (uint) Util.UnixTimeSinceEpoch();
|
TimeStampTerse = (uint) Util.UnixTimeSinceEpoch();
|
||||||
m_updateFlag = 1;
|
UpdateFlag = UpdateRequired.TERSE;
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT PART]: Scheduling terse update for {0}, {1} at {2}",
|
// "[SCENE OBJECT PART]: Scheduling terse update for {0}, {1} at {2}",
|
||||||
|
@ -3018,7 +3025,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
const float POSITION_TOLERANCE = 0.05f;
|
const float POSITION_TOLERANCE = 0.05f;
|
||||||
const int TIME_MS_TOLERANCE = 3000;
|
const int TIME_MS_TOLERANCE = 3000;
|
||||||
|
|
||||||
if (m_updateFlag == 1)
|
switch (UpdateFlag)
|
||||||
|
{
|
||||||
|
case UpdateRequired.TERSE:
|
||||||
{
|
{
|
||||||
// Throw away duplicate or insignificant updates
|
// Throw away duplicate or insignificant updates
|
||||||
if (!RotationOffset.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) ||
|
if (!RotationOffset.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) ||
|
||||||
|
@ -3032,14 +3041,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
AddTerseUpdateToAllAvatars();
|
AddTerseUpdateToAllAvatars();
|
||||||
ClearUpdateSchedule();
|
ClearUpdateSchedule();
|
||||||
|
|
||||||
// This causes the Scene to 'poll' physical objects every couple of frames
|
|
||||||
// bad, so it's been replaced by an event driven method.
|
|
||||||
//if ((ObjectFlags & (uint)PrimFlags.Physics) != 0)
|
|
||||||
//{
|
|
||||||
// Only send the constant terse updates on physical objects!
|
|
||||||
//ScheduleTerseUpdate();
|
|
||||||
//}
|
|
||||||
|
|
||||||
// Update the "last" values
|
// Update the "last" values
|
||||||
m_lastPosition = OffsetPosition;
|
m_lastPosition = OffsetPosition;
|
||||||
m_lastRotation = RotationOffset;
|
m_lastRotation = RotationOffset;
|
||||||
|
@ -3048,15 +3049,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_lastAngularVelocity = AngularVelocity;
|
m_lastAngularVelocity = AngularVelocity;
|
||||||
m_lastTerseSent = Environment.TickCount;
|
m_lastTerseSent = Environment.TickCount;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
case UpdateRequired.FULL:
|
||||||
{
|
|
||||||
if (m_updateFlag == 2) // is a new prim, just created/reloaded or has major changes
|
|
||||||
{
|
{
|
||||||
AddFullUpdateToAllAvatars();
|
AddFullUpdateToAllAvatars();
|
||||||
ClearUpdateSchedule();
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ClearUpdateSchedule();
|
ClearUpdateSchedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3436,7 +3437,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
_groupID = groupID;
|
_groupID = groupID;
|
||||||
if (client != null)
|
if (client != null)
|
||||||
SendPropertiesToClient(client);
|
SendPropertiesToClient(client);
|
||||||
m_updateFlag = 2;
|
UpdateFlag = UpdateRequired.FULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -2628,7 +2628,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SendAppearanceToAllOtherAgents()
|
public void SendAppearanceToAllOtherAgents()
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherAgents: {0} ({1})", Name, UUID);
|
// m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherAgents: {0} {1}", Name, UUID);
|
||||||
|
|
||||||
// only send update from root agents to other clients; children are only "listening posts"
|
// only send update from root agents to other clients; children are only "listening posts"
|
||||||
if (IsChildAgent)
|
if (IsChildAgent)
|
||||||
{
|
{
|
||||||
|
@ -2656,7 +2657,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void SendOtherAgentsAppearanceToMe()
|
public void SendOtherAgentsAppearanceToMe()
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToMe: {0} ({1})", Name, UUID);
|
// m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToMe: {0} {1}", Name, UUID);
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
|
m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
|
||||||
|
@ -3211,7 +3212,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
foreach (ISceneObject so in cAgent.AttachmentObjects)
|
foreach (ISceneObject so in cAgent.AttachmentObjects)
|
||||||
{
|
{
|
||||||
((SceneObjectGroup)so).LocalId = 0;
|
((SceneObjectGroup)so).LocalId = 0;
|
||||||
((SceneObjectGroup)so).RootPart.UpdateFlag = 0;
|
((SceneObjectGroup)so).RootPart.ClearUpdateSchedule();
|
||||||
so.SetState(cAgent.AttachmentObjectStates[i++], m_scene);
|
so.SetState(cAgent.AttachmentObjectStates[i++], m_scene);
|
||||||
m_scene.IncomingCreateObject(so);
|
m_scene.IncomingCreateObject(so);
|
||||||
}
|
}
|
||||||
|
|
|
@ -316,7 +316,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
m_SOPXmlProcessors.Add("ClickAction", ProcessClickAction);
|
m_SOPXmlProcessors.Add("ClickAction", ProcessClickAction);
|
||||||
m_SOPXmlProcessors.Add("Shape", ProcessShape);
|
m_SOPXmlProcessors.Add("Shape", ProcessShape);
|
||||||
m_SOPXmlProcessors.Add("Scale", ProcessScale);
|
m_SOPXmlProcessors.Add("Scale", ProcessScale);
|
||||||
m_SOPXmlProcessors.Add("UpdateFlag", ProcessUpdateFlag);
|
|
||||||
m_SOPXmlProcessors.Add("SitTargetOrientation", ProcessSitTargetOrientation);
|
m_SOPXmlProcessors.Add("SitTargetOrientation", ProcessSitTargetOrientation);
|
||||||
m_SOPXmlProcessors.Add("SitTargetPosition", ProcessSitTargetPosition);
|
m_SOPXmlProcessors.Add("SitTargetPosition", ProcessSitTargetPosition);
|
||||||
m_SOPXmlProcessors.Add("SitTargetPositionLL", ProcessSitTargetPositionLL);
|
m_SOPXmlProcessors.Add("SitTargetPositionLL", ProcessSitTargetPositionLL);
|
||||||
|
@ -584,11 +583,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
obj.Scale = Util.ReadVector(reader, "Scale");
|
obj.Scale = Util.ReadVector(reader, "Scale");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ProcessUpdateFlag(SceneObjectPart obj, XmlTextReader reader)
|
|
||||||
{
|
|
||||||
obj.UpdateFlag = (byte)reader.ReadElementContentAsInt("UpdateFlag", String.Empty);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void ProcessSitTargetOrientation(SceneObjectPart obj, XmlTextReader reader)
|
private static void ProcessSitTargetOrientation(SceneObjectPart obj, XmlTextReader reader)
|
||||||
{
|
{
|
||||||
obj.SitTargetOrientation = Util.ReadQuaternion(reader, "SitTargetOrientation");
|
obj.SitTargetOrientation = Util.ReadQuaternion(reader, "SitTargetOrientation");
|
||||||
|
@ -1187,7 +1181,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
WriteShape(writer, sop.Shape, options);
|
WriteShape(writer, sop.Shape, options);
|
||||||
|
|
||||||
WriteVector(writer, "Scale", sop.Scale);
|
WriteVector(writer, "Scale", sop.Scale);
|
||||||
writer.WriteElementString("UpdateFlag", sop.UpdateFlag.ToString());
|
|
||||||
WriteQuaternion(writer, "SitTargetOrientation", sop.SitTargetOrientation);
|
WriteQuaternion(writer, "SitTargetOrientation", sop.SitTargetOrientation);
|
||||||
WriteVector(writer, "SitTargetPosition", sop.SitTargetPosition);
|
WriteVector(writer, "SitTargetPosition", sop.SitTargetPosition);
|
||||||
WriteVector(writer, "SitTargetPositionLL", sop.SitTargetPositionLL);
|
WriteVector(writer, "SitTargetPositionLL", sop.SitTargetPositionLL);
|
||||||
|
|
|
@ -70,8 +70,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
grp2.UpdateGroupRotationR(Quaternion.CreateFromEulers(180 * Utils.DEG_TO_RAD, 0, 0));
|
grp2.UpdateGroupRotationR(Quaternion.CreateFromEulers(180 * Utils.DEG_TO_RAD, 0, 0));
|
||||||
|
|
||||||
// Required for linking
|
// Required for linking
|
||||||
grp1.RootPart.UpdateFlag = 0;
|
grp1.RootPart.ClearUpdateSchedule();
|
||||||
grp2.RootPart.UpdateFlag = 0;
|
grp2.RootPart.ClearUpdateSchedule();
|
||||||
|
|
||||||
// Link grp2 to grp1. part2 becomes child prim to grp1. grp2 is eliminated.
|
// Link grp2 to grp1. part2 becomes child prim to grp1. grp2 is eliminated.
|
||||||
grp1.LinkToGroup(grp2);
|
grp1.LinkToGroup(grp2);
|
||||||
|
@ -164,10 +164,10 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
grp4.UpdateGroupRotationR(Quaternion.CreateFromEulers(0, 90 * Utils.DEG_TO_RAD, 0));
|
grp4.UpdateGroupRotationR(Quaternion.CreateFromEulers(0, 90 * Utils.DEG_TO_RAD, 0));
|
||||||
|
|
||||||
// Required for linking
|
// Required for linking
|
||||||
grp1.RootPart.UpdateFlag = 0;
|
grp1.RootPart.ClearUpdateSchedule();
|
||||||
grp2.RootPart.UpdateFlag = 0;
|
grp2.RootPart.ClearUpdateSchedule();
|
||||||
grp3.RootPart.UpdateFlag = 0;
|
grp3.RootPart.ClearUpdateSchedule();
|
||||||
grp4.RootPart.UpdateFlag = 0;
|
grp4.RootPart.ClearUpdateSchedule();
|
||||||
|
|
||||||
// Link grp2 to grp1. part2 becomes child prim to grp1. grp2 is eliminated.
|
// Link grp2 to grp1. part2 becomes child prim to grp1. grp2 is eliminated.
|
||||||
grp1.LinkToGroup(grp2);
|
grp1.LinkToGroup(grp2);
|
||||||
|
@ -198,8 +198,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
// Required for linking
|
// Required for linking
|
||||||
grp1.RootPart.UpdateFlag = 0;
|
grp1.RootPart.ClearUpdateSchedule();
|
||||||
grp3.RootPart.UpdateFlag = 0;
|
grp3.RootPart.ClearUpdateSchedule();
|
||||||
|
|
||||||
// root part should have no offset position or rotation
|
// root part should have no offset position or rotation
|
||||||
Assert.That(part1.OffsetPosition == Vector3.Zero && part1.RotationOffset == Quaternion.Identity,
|
Assert.That(part1.OffsetPosition == Vector3.Zero && part1.RotationOffset == Quaternion.Identity,
|
||||||
|
|
|
@ -158,6 +158,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Note: Updating these properties on sop automatically schedules an update if needed
|
||||||
if (Position != Vector3.Zero)
|
if (Position != Vector3.Zero)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
|
@ -181,8 +182,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
part.Resize(Scale);
|
part.Resize(Scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
part.ScheduleTerseUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
part.Undoing = false;
|
part.Undoing = false;
|
||||||
|
@ -212,6 +211,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Note: Updating these properties on sop automatically schedules an update if needed
|
||||||
if (Position != Vector3.Zero)
|
if (Position != Vector3.Zero)
|
||||||
part.OffsetPosition = Position;
|
part.OffsetPosition = Position;
|
||||||
|
|
||||||
|
@ -220,8 +220,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (Scale != Vector3.Zero)
|
if (Scale != Vector3.Zero)
|
||||||
part.Resize(Scale);
|
part.Resize(Scale);
|
||||||
|
|
||||||
part.ScheduleTerseUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
part.Undoing = false;
|
part.Undoing = false;
|
||||||
|
|
|
@ -3351,10 +3351,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
protected void TargetOmega(SceneObjectPart part, LSL_Vector axis, double spinrate, double gain)
|
protected void TargetOmega(SceneObjectPart part, LSL_Vector axis, double spinrate, double gain)
|
||||||
{
|
{
|
||||||
part.AngularVelocity = new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
|
part.UpdateAngularVelocity(new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate)));
|
||||||
part.ScheduleTerseUpdate();
|
|
||||||
part.SendTerseUpdateToAllClients();
|
|
||||||
part.ParentGroup.HasGroupChanged = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Integer llGetStartParameter()
|
public LSL_Integer llGetStartParameter()
|
||||||
|
@ -3616,11 +3613,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
parentPrim = targetPart.ParentGroup;
|
parentPrim = targetPart.ParentGroup;
|
||||||
childPrim = m_host.ParentGroup;
|
childPrim = m_host.ParentGroup;
|
||||||
}
|
}
|
||||||
// byte uf = childPrim.RootPart.UpdateFlag;
|
|
||||||
childPrim.RootPart.UpdateFlag = 0;
|
// Required for linking
|
||||||
|
childPrim.RootPart.ClearUpdateSchedule();
|
||||||
parentPrim.LinkToGroup(childPrim);
|
parentPrim.LinkToGroup(childPrim);
|
||||||
// if (uf != (Byte)0)
|
|
||||||
// parent.RootPart.UpdateFlag = uf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
parentPrim.TriggerScriptChangedEvent(Changed.LINK);
|
parentPrim.TriggerScriptChangedEvent(Changed.LINK);
|
||||||
|
@ -3701,7 +3697,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
parts.Remove(newRoot);
|
parts.Remove(newRoot);
|
||||||
foreach (SceneObjectPart part in parts)
|
foreach (SceneObjectPart part in parts)
|
||||||
{
|
{
|
||||||
part.UpdateFlag = 0;
|
// Required for linking
|
||||||
|
part.ClearUpdateSchedule();
|
||||||
newRoot.ParentGroup.LinkToGroup(part.ParentGroup);
|
newRoot.ParentGroup.LinkToGroup(part.ParentGroup);
|
||||||
}
|
}
|
||||||
newRoot.ParentGroup.HasGroupChanged = true;
|
newRoot.ParentGroup.HasGroupChanged = true;
|
||||||
|
|
|
@ -265,9 +265,16 @@ namespace OpenSim.Server.Base
|
||||||
public virtual int Run()
|
public virtual int Run()
|
||||||
{
|
{
|
||||||
while (m_Running)
|
while (m_Running)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
MainConsole.Instance.Prompt();
|
MainConsole.Instance.Prompt();
|
||||||
}
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat("Command error: {0}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (m_pidFile != String.Empty)
|
if (m_pidFile != String.Empty)
|
||||||
File.Delete(m_pidFile);
|
File.Delete(m_pidFile);
|
||||||
|
|
Loading…
Reference in New Issue