Create full updates for making sit complete
parent
5eca61585d
commit
838ffc27ed
|
@ -335,7 +335,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
//m_scene.EventManager.OnFrame += Update;
|
//m_scene.EventManager.OnFrame += Update;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegionSyncAvatar(Scene scene, UUID agentID, string first, string last, Vector3 startPos, RegionSyncClientView view)
|
public RegionSyncAvatar(Scene scene, UUID agentID, string first, string last, Vector3 startPos,
|
||||||
|
RegionSyncClientView view)
|
||||||
{
|
{
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
m_agentID = agentID;
|
m_agentID = agentID;
|
||||||
|
@ -493,23 +494,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
|
|
||||||
public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs)
|
public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs)
|
||||||
{
|
{
|
||||||
m_log.Debug("[REGION SYNC AVATAR] SendAnimations");
|
|
||||||
if (m_clientView != null)
|
if (m_clientView != null)
|
||||||
{
|
{
|
||||||
OSDMap data = new OSDMap();
|
// m_log.Debug("[REGION SYNC AVATAR] SendAnimations");
|
||||||
data["agentID"] = OSD.FromUUID(m_agentID);
|
m_scene.RegionSyncServerModule.SendAnimations(m_agentID, animations, seqs, sourceAgentId, objectIDs);
|
||||||
OSDArray animatA = new OSDArray();
|
|
||||||
foreach (UUID uu in animations) animatA.Add(OSD.FromUUID(uu));
|
|
||||||
data["animations"] = animatA;
|
|
||||||
OSDArray seqsA = new OSDArray();
|
|
||||||
foreach (int ss in seqs) seqsA.Add(OSD.FromInteger(ss));
|
|
||||||
data["seqs"] = seqsA;
|
|
||||||
data["sourceAgentID"] = OSD.FromUUID(sourceAgentId);
|
|
||||||
OSDArray obIDA = new OSDArray();
|
|
||||||
foreach (UUID ii in objectIDs) obIDA.Add(OSD.FromUUID(ii));
|
|
||||||
data["objectIDs"] = obIDA;
|
|
||||||
RegionSyncMessage rsm = new RegionSyncMessage(RegionSyncMessage.MsgType.SendAnimations, OSDParser.SerializeJsonString(data));
|
|
||||||
m_clientView.Send(rsm);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -408,6 +408,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
bool flying = false;
|
bool flying = false;
|
||||||
string anim = "";
|
string anim = "";
|
||||||
uint flags = 0;
|
uint flags = 0;
|
||||||
|
Vector4 collisionPlane = Vector4.Zero;
|
||||||
|
Vector3 offsetPosition = Vector3.Zero;
|
||||||
|
uint parentID = 0;
|
||||||
|
bool doFullUpdate = false;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -418,6 +422,16 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
flying = data["fly"].AsBoolean();
|
flying = data["fly"].AsBoolean();
|
||||||
anim = data["anim"].AsString();
|
anim = data["anim"].AsString();
|
||||||
flags = data["flags"].AsUInteger();
|
flags = data["flags"].AsUInteger();
|
||||||
|
// do we have the data for a full update?
|
||||||
|
OSD valTemp = null;
|
||||||
|
data.TryGetValue("coll", out valTemp);
|
||||||
|
if (valTemp != null)
|
||||||
|
{
|
||||||
|
collisionPlane = valTemp.AsVector4();
|
||||||
|
offsetPosition = data["off"].AsVector3();
|
||||||
|
parentID = data["pID"].AsUInteger();
|
||||||
|
doFullUpdate = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -476,6 +490,12 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
presence.PhysicsActor.Flying = flying;
|
presence.PhysicsActor.Flying = flying;
|
||||||
presence.PhysicsActor.CollidingGround = !flying;
|
presence.PhysicsActor.CollidingGround = !flying;
|
||||||
}
|
}
|
||||||
|
if (doFullUpdate)
|
||||||
|
{
|
||||||
|
presence.CollisionPlane = collisionPlane;
|
||||||
|
presence.OffsetPosition = offsetPosition;
|
||||||
|
presence.ParentID = parentID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
|
@ -483,7 +503,14 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
presence.SendTerseUpdateToAllClients();
|
if (doFullUpdate)
|
||||||
|
{
|
||||||
|
presence.SendFullUpdateToAllClients();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
presence.SendTerseUpdateToAllClients();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -720,6 +747,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID agentID = data["agentID"].AsUUID();
|
UUID agentID = data["agentID"].AsUUID();
|
||||||
|
// m_log.DebugFormat("{0} SendAnimations for {1}", LogHeader, agentID.ToString());
|
||||||
|
|
||||||
OSDArray animatA = (OSDArray)data["animations"];
|
OSDArray animatA = (OSDArray)data["animations"];
|
||||||
UUID[] animIDs = new UUID[animatA.Count];
|
UUID[] animIDs = new UUID[animatA.Count];
|
||||||
|
@ -741,6 +769,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
{
|
{
|
||||||
sp.ControllingClient.SendAnimations(animIDs, seqs, sourceAgentID, objectIDs);
|
sp.ControllingClient.SendAnimations(animIDs, seqs, sourceAgentID, objectIDs);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("{0} Could not send animation for {1} because scene presence not found",
|
||||||
|
LogHeader, agentID.ToString());
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case RegionSyncMessage.MsgType.BalanceClientLoad:
|
case RegionSyncMessage.MsgType.BalanceClientLoad:
|
||||||
|
|
|
@ -283,7 +283,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
{
|
{
|
||||||
if (!presence.IsDeleted)
|
if (!presence.IsDeleted)
|
||||||
{
|
{
|
||||||
OSDMap data = new OSDMap(7);
|
OSDMap data = new OSDMap(10);
|
||||||
data["id"] = OSD.FromUUID(presence.UUID);
|
data["id"] = OSD.FromUUID(presence.UUID);
|
||||||
// Do not include offset for appearance height. That will be handled by RegionSyncClient before sending to viewers
|
// Do not include offset for appearance height. That will be handled by RegionSyncClient before sending to viewers
|
||||||
if(presence.AbsolutePosition.IsFinite())
|
if(presence.AbsolutePosition.IsFinite())
|
||||||
|
@ -298,6 +298,15 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
data["fly"] = OSD.FromBoolean(presence.Flying);
|
data["fly"] = OSD.FromBoolean(presence.Flying);
|
||||||
data["flags"] = OSD.FromUInteger((uint)presence.AgentControlFlags);
|
data["flags"] = OSD.FromUInteger((uint)presence.AgentControlFlags);
|
||||||
data["anim"] = OSD.FromString(presence.Animator.CurrentMovementAnimation);
|
data["anim"] = OSD.FromString(presence.Animator.CurrentMovementAnimation);
|
||||||
|
// needed for a full update
|
||||||
|
if (presence.ParentID != presence.lastSentParentID)
|
||||||
|
{
|
||||||
|
data["coll"] = OSD.FromVector4(presence.CollisionPlane);
|
||||||
|
data["off"] = OSD.FromVector3(presence.OffsetPosition);
|
||||||
|
data["pID"] = OSD.FromUInteger(presence.ParentID);
|
||||||
|
presence.lastSentParentID = presence.ParentID;
|
||||||
|
}
|
||||||
|
|
||||||
RegionSyncMessage rsm = new RegionSyncMessage(RegionSyncMessage.MsgType.UpdatedAvatar, OSDParser.SerializeJsonString(data));
|
RegionSyncMessage rsm = new RegionSyncMessage(RegionSyncMessage.MsgType.UpdatedAvatar, OSDParser.SerializeJsonString(data));
|
||||||
m_server.EnqueuePresenceUpdate(presence.UUID, rsm.ToBytes());
|
m_server.EnqueuePresenceUpdate(presence.UUID, rsm.ToBytes());
|
||||||
|
|
||||||
|
@ -344,6 +353,25 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
m_appearanceTimers[agentID] = appearanceSetter;
|
m_appearanceTimers[agentID] = appearanceSetter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendAnimations(UUID agentID, UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs)
|
||||||
|
{
|
||||||
|
OSDMap data = new OSDMap();
|
||||||
|
data["agentID"] = OSD.FromUUID(agentID);
|
||||||
|
OSDArray animatA = new OSDArray();
|
||||||
|
foreach (UUID uu in animations) animatA.Add(OSD.FromUUID(uu));
|
||||||
|
data["animations"] = animatA;
|
||||||
|
OSDArray seqsA = new OSDArray();
|
||||||
|
foreach (int ss in seqs) seqsA.Add(OSD.FromInteger(ss));
|
||||||
|
data["seqs"] = seqsA;
|
||||||
|
data["sourceAgentID"] = OSD.FromUUID(sourceAgentId);
|
||||||
|
OSDArray obIDA = new OSDArray();
|
||||||
|
foreach (UUID ii in objectIDs) obIDA.Add(OSD.FromUUID(ii));
|
||||||
|
data["objectIDs"] = obIDA;
|
||||||
|
RegionSyncMessage rsm = new RegionSyncMessage(RegionSyncMessage.MsgType.SendAnimations, OSDParser.SerializeJsonString(data));
|
||||||
|
m_server.Broadcast(rsm);
|
||||||
|
// m_clientView.Send(rsm);
|
||||||
|
}
|
||||||
|
|
||||||
public void DeleteObject(ulong regionHandle, uint localID, SceneObjectPart part)
|
public void DeleteObject(ulong regionHandle, uint localID, SceneObjectPart part)
|
||||||
{
|
{
|
||||||
if (!Active || !Synced)
|
if (!Active || !Synced)
|
||||||
|
|
|
@ -44,6 +44,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
//void DeleteObject(ulong regionHandle, uint localID);
|
//void DeleteObject(ulong regionHandle, uint localID);
|
||||||
void DeleteObject(ulong regionHandle, uint localID, SceneObjectPart part);
|
void DeleteObject(ulong regionHandle, uint localID, SceneObjectPart part);
|
||||||
void SendAppearance(UUID agentID, byte[] vp, Primitive.TextureEntry te);
|
void SendAppearance(UUID agentID, byte[] vp, Primitive.TextureEntry te);
|
||||||
|
void SendAnimations(UUID agentID, UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs);
|
||||||
|
|
||||||
//KittyL: added to support remote script engine actor
|
//KittyL: added to support remote script engine actor
|
||||||
//void SendRezScript(SceneObjectGroup sog);
|
//void SendRezScript(SceneObjectGroup sog);
|
||||||
|
|
|
@ -126,6 +126,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private Vector3 m_lastPosition;
|
private Vector3 m_lastPosition;
|
||||||
private Quaternion m_lastRotation;
|
private Quaternion m_lastRotation;
|
||||||
private Vector3 m_lastVelocity;
|
private Vector3 m_lastVelocity;
|
||||||
|
// RA: following kludge lets us remember if we need to send a full update
|
||||||
|
// Used in RegionSyncServerModule
|
||||||
|
public uint lastSentParentID;
|
||||||
//private int m_lastTerseSent;
|
//private int m_lastTerseSent;
|
||||||
|
|
||||||
private bool m_updateflag;
|
private bool m_updateflag;
|
||||||
|
@ -2525,7 +2528,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// REGION SYNC
|
// REGION SYNC
|
||||||
// The server should not be doing anything via the ForEachScenePresence method
|
// The server should not be doing anything via the ForEachScenePresence method
|
||||||
if (m_scene.IsSyncedServer())
|
if (m_scene.IsSyncedServer())
|
||||||
|
{
|
||||||
|
m_scene.RegionSyncServerModule.QueuePresenceForTerseUpdate(this);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
m_perfMonMS = Util.EnvironmentTickCount();
|
m_perfMonMS = Util.EnvironmentTickCount();
|
||||||
|
|
||||||
// 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"
|
||||||
|
|
Loading…
Reference in New Issue