* Added Helpers.SplitBlocks() that calculates how to split multiple blocks into multiple packets

* Fixed a typo in TestClient login command usage
Simian:
* Asset uploads were returning the TransactionID instead of the AssetID causing uploads to seemingly fail
* Added ISceneManager.AvatarAppearance and OnAvatarAppearance
* Added UI sounds from OpenSim and sound asset loading
* Split up FetchInventoryReply and InventoryDescendents into multiple packets when necessary

git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@2281 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
John Hurliman
2008-10-08 22:10:14 +00:00
parent 16c07999af
commit e180f7a612
34 changed files with 293 additions and 184 deletions

View File

@@ -25,6 +25,7 @@ namespace Simian.Extensions
public event ObjectFlagsCallback OnObjectFlags;
public event ObjectImageCallback OnObjectImage;
public event ObjectModifyCallback OnObjectModify;
public event AvatarAppearanceCallback OnAvatarAppearance;
public event TerrainUpdatedCallback OnTerrainUpdated;
public float[] Heightmap
@@ -180,6 +181,35 @@ namespace Simian.Extensions
BroadcastObjectUpdate(obj);
}
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);
}
}
}
public bool TryGetObject(uint localID, out SimulationObject obj)
{
return sceneObjects.TryGetValue(localID, out obj);
@@ -284,7 +314,7 @@ namespace Simian.Extensions
if (otherAgent != agent)
{
// Send appearances for this avatar
AvatarAppearancePacket appearance = AvatarManager.BuildAppearancePacket(otherAgent);
AvatarAppearancePacket appearance = BuildAppearancePacket(otherAgent);
server.UDP.SendPacket(agent.AgentID, appearance, PacketCategory.State);
}
}
@@ -343,5 +373,22 @@ namespace Simian.Extensions
}
}
}
static AvatarAppearancePacket BuildAppearancePacket(Agent agent)
{
AvatarAppearancePacket appearance = new AvatarAppearancePacket();
appearance.ObjectData.TextureEntry = agent.Avatar.Textures.ToBytes();
appearance.Sender.ID = agent.AgentID;
appearance.Sender.IsTrial = false;
appearance.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218];
for (int i = 0; i < 218; i++)
{
appearance.VisualParam[i] = new AvatarAppearancePacket.VisualParamBlock();
appearance.VisualParam[i].ParamValue = agent.VisualParams[i];
}
return appearance;
}
}
}