* 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:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user