diff --git a/Programs/Simian/Agent.cs b/Programs/Simian/Agent.cs
index 1bae2909..6ebb3d7e 100644
--- a/Programs/Simian/Agent.cs
+++ b/Programs/Simian/Agent.cs
@@ -15,6 +15,8 @@ namespace Simian
public uint CircuitCode;
public string FirstName;
public string LastName;
+ public Avatar Avatar = new Avatar();
+ public AgentManager.ControlFlags ControlFlags = AgentManager.ControlFlags.NONE;
/// Sequence numbers of packets we've received (for duplicate checking)
internal Queue packetArchive = new Queue();
diff --git a/Programs/Simian/Extensions/SceneManager.cs b/Programs/Simian/Extensions/SceneManager.cs
index 4bac3009..23b23bc3 100644
--- a/Programs/Simian/Extensions/SceneManager.cs
+++ b/Programs/Simian/Extensions/SceneManager.cs
@@ -45,9 +45,8 @@ namespace Simian
avatar.Rotation = Quaternion.Identity;
avatar.Scale = new Vector3(1f, 1f, 3f);
- // Add this agent to the scene graph
- lock (server.SceneAvatars)
- server.SceneAvatars[avatar.ID] = avatar;
+ // Link this avatar up with the corresponding agent
+ agent.Avatar = avatar;
AgentMovementCompletePacket complete = new AgentMovementCompletePacket();
complete.AgentData.AgentID = agent.AgentID;
@@ -65,11 +64,7 @@ namespace Simian
{
AgentUpdatePacket update = (AgentUpdatePacket)packet;
- Avatar avatar;
- if (server.SceneAvatars.TryGetValue(agent.AgentID, out avatar))
- {
- SendFullUpdate(agent, avatar, update.AgentData.State, update.AgentData.Flags);
- }
+ SendFullUpdate(agent, agent.Avatar, update.AgentData.State, update.AgentData.Flags);
}
void AgentWearablesRequestHandler(Packet packet, Agent agent)
diff --git a/Programs/Simian/Simian.cs b/Programs/Simian/Simian.cs
index 73bfab8a..1024cc9c 100644
--- a/Programs/Simian/Simian.cs
+++ b/Programs/Simian/Simian.cs
@@ -16,7 +16,9 @@ namespace Simian
public HttpServer HttpServer;
public UDPServer UDPServer;
public Dictionary SceneObjects = new Dictionary();
- public Dictionary SceneAvatars = new Dictionary();
+
+ /// All of the agents currently connected to this UDP server
+ public Dictionary Agents = new Dictionary();
Dictionary unassociatedAgents;
int currentCircuitCode;
diff --git a/Programs/Simian/UDPServer.cs b/Programs/Simian/UDPServer.cs
index 73b55b08..c2a6a8a6 100644
--- a/Programs/Simian/UDPServer.cs
+++ b/Programs/Simian/UDPServer.cs
@@ -27,8 +27,6 @@ namespace Simian
Simian server;
/// Handlers for incoming packets
PacketEventDictionary packetEvents = new PacketEventDictionary();
- /// All of the agents currently connected to this UDP server
- Dictionary agents = new Dictionary();
/// Incoming packets that are awaiting handling
BlockingQueue packetInbox = new BlockingQueue(Settings.PACKET_INBOX_SIZE);
@@ -84,8 +82,8 @@ namespace Simian
{
agent.Initialize((IPEndPoint)buffer.RemoteEndPoint);
- lock (agents)
- agents[(IPEndPoint)buffer.RemoteEndPoint] = agent;
+ lock (server.Agents)
+ server.Agents[(IPEndPoint)buffer.RemoteEndPoint] = agent;
Logger.Log("Activated UDP circuit " + useCircuitCode.CircuitCode.Code, Helpers.LogLevel.Info);
@@ -101,7 +99,7 @@ namespace Simian
else
{
// Determine which agent this packet came from
- if (!agents.TryGetValue((IPEndPoint)buffer.RemoteEndPoint, out agent))
+ if (!server.Agents.TryGetValue((IPEndPoint)buffer.RemoteEndPoint, out agent))
{
Logger.Log("Received UDP packet from an unrecognized source: " + ((IPEndPoint)buffer.RemoteEndPoint).ToString(),
Helpers.LogLevel.Warning);