void BroadcastObjectUpdate(SimulationObject obj) { ObjectUpdatePacket update = SimulationObject.BuildFullUpdate(obj.Prim, server.RegionHandle, 0, obj.Prim.Flags); server.UDP.BroadcastPacket(update, PacketCategory.State); }
// HACK: The reduction provider will deprecate this at some point void SynchronizeStateTo(Agent agent) { // Send the parcel overlay server.Parcels.SendParcelOverlay(agent); // Send object updates for objects and avatars sceneObjects.ForEach(delegate(SimulationObject obj) { ObjectUpdatePacket update = SimulationObject.BuildFullUpdate(obj.Prim, obj.Prim.RegionHandle, 0, obj.Prim.Flags); server.UDP.SendPacket(agent.AgentID, update, PacketCategory.State); }); // Send appearances for all avatars lock (server.Agents) { foreach (Agent otherAgent in server.Agents.Values) { if (otherAgent != agent) { // Send appearances for this avatar AvatarAppearancePacket appearance = BuildAppearancePacket(otherAgent); server.UDP.SendPacket(agent.AgentID, appearance, PacketCategory.State); } } } // Send terrain data SendLayerData(agent); }
public void AvatarAppearance(object sender, Agent agent, Primitive.TextureEntry textures, byte[] visualParams) { if (OnAvatarAppearance != null) { OnAvatarAppearance(sender, agent, textures, visualParams); } // Update the avatar agent.Avatar.Textures = textures; if (visualParams != null) { agent.VisualParams = visualParams; } // Broadcast the object update ObjectUpdatePacket update = SimulationObject.BuildFullUpdate(agent.Avatar, server.RegionHandle, agent.State, agent.Flags); server.UDP.BroadcastPacket(update, PacketCategory.State); // Send the appearance packet to all other clients AvatarAppearancePacket appearance = BuildAppearancePacket(agent); lock (server.Agents) { foreach (Agent recipient in server.Agents.Values) { if (recipient != agent) { server.UDP.SendPacket(recipient.AgentID, appearance, PacketCategory.State); } } } }
void AgentUpdateHandler(Packet packet, Agent agent) { AgentUpdatePacket update = (AgentUpdatePacket)packet; agent.Avatar.Rotation = update.AgentData.BodyRotation; agent.ControlFlags = (AgentManager.ControlFlags)update.AgentData.ControlFlags; agent.State = update.AgentData.State; agent.Flags = (PrimFlags)update.AgentData.Flags; ObjectUpdatePacket fullUpdate = SimulationObject.BuildFullUpdate(agent.Avatar, server.RegionHandle, agent.State, agent.Flags); server.UDP.BroadcastPacket(fullUpdate, PacketCategory.State); }
public bool ObjectAdd(object sender, Agent creator, SimulationObject obj, PrimFlags creatorFlags) { // Check if the object already exists in the scene if (sceneObjects.ContainsKey(obj.Prim.ID)) { Logger.Log(String.Format("Attempting to add duplicate object {0} to the scene", obj.Prim.ID), Helpers.LogLevel.Warning); return(false); } // Assign a unique LocalID to this object obj.Prim.LocalID = (uint)Interlocked.Increment(ref currentLocalID); if (OnObjectAdd != null) { OnObjectAdd(sender, creator, obj, creatorFlags); } // Add the object to the scene dictionary sceneObjects.Add(obj.Prim.LocalID, obj.Prim.ID, obj); // Send an update out to the creator ObjectUpdatePacket updateToOwner = SimulationObject.BuildFullUpdate(obj.Prim, server.RegionHandle, 0, obj.Prim.Flags | creatorFlags); server.UDP.SendPacket(creator.AgentID, updateToOwner, PacketCategory.State); // Send an update out to everyone else ObjectUpdatePacket updateToOthers = SimulationObject.BuildFullUpdate(obj.Prim, server.RegionHandle, 0, obj.Prim.Flags); lock (server.Agents) { foreach (Agent recipient in server.Agents.Values) { if (recipient != creator) { server.UDP.SendPacket(recipient.AgentID, updateToOthers, PacketCategory.State); } } } return(true); }