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;
|
||||
}
|
||||
|
||||
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_agentID = agentID;
|
||||
|
@ -493,23 +494,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
|
||||
public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs)
|
||||
{
|
||||
m_log.Debug("[REGION SYNC AVATAR] SendAnimations");
|
||||
if (m_clientView != null)
|
||||
{
|
||||
OSDMap data = new OSDMap();
|
||||
data["agentID"] = OSD.FromUUID(m_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_clientView.Send(rsm);
|
||||
// m_log.Debug("[REGION SYNC AVATAR] SendAnimations");
|
||||
m_scene.RegionSyncServerModule.SendAnimations(m_agentID, animations, seqs, sourceAgentId, objectIDs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -408,6 +408,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
bool flying = false;
|
||||
string anim = "";
|
||||
uint flags = 0;
|
||||
Vector4 collisionPlane = Vector4.Zero;
|
||||
Vector3 offsetPosition = Vector3.Zero;
|
||||
uint parentID = 0;
|
||||
bool doFullUpdate = false;
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -418,6 +422,16 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
flying = data["fly"].AsBoolean();
|
||||
anim = data["anim"].AsString();
|
||||
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)
|
||||
{
|
||||
|
@ -476,6 +490,12 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
presence.PhysicsActor.Flying = flying;
|
||||
presence.PhysicsActor.CollidingGround = !flying;
|
||||
}
|
||||
if (doFullUpdate)
|
||||
{
|
||||
presence.CollisionPlane = collisionPlane;
|
||||
presence.OffsetPosition = offsetPosition;
|
||||
presence.ParentID = parentID;
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
|
@ -483,7 +503,14 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
}
|
||||
try
|
||||
{
|
||||
presence.SendTerseUpdateToAllClients();
|
||||
if (doFullUpdate)
|
||||
{
|
||||
presence.SendFullUpdateToAllClients();
|
||||
}
|
||||
else
|
||||
{
|
||||
presence.SendTerseUpdateToAllClients();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
@ -720,6 +747,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
}
|
||||
|
||||
UUID agentID = data["agentID"].AsUUID();
|
||||
// m_log.DebugFormat("{0} SendAnimations for {1}", LogHeader, agentID.ToString());
|
||||
|
||||
OSDArray animatA = (OSDArray)data["animations"];
|
||||
UUID[] animIDs = new UUID[animatA.Count];
|
||||
|
@ -741,6 +769,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
{
|
||||
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;
|
||||
}
|
||||
case RegionSyncMessage.MsgType.BalanceClientLoad:
|
||||
|
|
|
@ -283,7 +283,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
{
|
||||
if (!presence.IsDeleted)
|
||||
{
|
||||
OSDMap data = new OSDMap(7);
|
||||
OSDMap data = new OSDMap(10);
|
||||
data["id"] = OSD.FromUUID(presence.UUID);
|
||||
// Do not include offset for appearance height. That will be handled by RegionSyncClient before sending to viewers
|
||||
if(presence.AbsolutePosition.IsFinite())
|
||||
|
@ -298,6 +298,15 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
data["fly"] = OSD.FromBoolean(presence.Flying);
|
||||
data["flags"] = OSD.FromUInteger((uint)presence.AgentControlFlags);
|
||||
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));
|
||||
m_server.EnqueuePresenceUpdate(presence.UUID, rsm.ToBytes());
|
||||
|
||||
|
@ -344,6 +353,25 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
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)
|
||||
{
|
||||
if (!Active || !Synced)
|
||||
|
|
|
@ -44,6 +44,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
//void DeleteObject(ulong regionHandle, uint localID);
|
||||
void DeleteObject(ulong regionHandle, uint localID, SceneObjectPart part);
|
||||
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
|
||||
//void SendRezScript(SceneObjectGroup sog);
|
||||
|
|
|
@ -126,6 +126,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
private Vector3 m_lastPosition;
|
||||
private Quaternion m_lastRotation;
|
||||
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 bool m_updateflag;
|
||||
|
@ -2525,7 +2528,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// REGION SYNC
|
||||
// The server should not be doing anything via the ForEachScenePresence method
|
||||
if (m_scene.IsSyncedServer())
|
||||
{
|
||||
m_scene.RegionSyncServerModule.QueuePresenceForTerseUpdate(this);
|
||||
return;
|
||||
}
|
||||
m_perfMonMS = Util.EnvironmentTickCount();
|
||||
|
||||
// only send update from root agents to other clients; children are only "listening posts"
|
||||
|
|
Loading…
Reference in New Issue