LIBOMV-686 Implements new event patterns based on the Microsoft Framework Design Guidelines in AvatarManager

* BREAKING CHANGE * this is a major shift in the way events are internally handled.
* TODO: need to complete the EventArgs class documentation
* Adds new TestClient commands "play" to play animations, and bots to detect other bots.

git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@3163 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
Jim Radford
2009-10-22 04:29:25 +00:00
parent b0cb77e1e5
commit 0f8677cee9
12 changed files with 1187 additions and 462 deletions

View File

@@ -153,14 +153,40 @@ namespace OpenMetaverse.GUI
private void InitializeClient(GridClient client)
{
_Client = client;
_Client.Avatars.OnAvatarAppearance += new AvatarManager.AvatarAppearanceCallback(Avatars_OnAvatarAppearance);
_Client.Avatars.OnAvatarNames += new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);
_Client.Avatars.AvatarAppearance += Avatars_OnAvatarAppearance;
_Client.Avatars.UUIDNameReply += new EventHandler<UUIDNameReplyEventArgs>(Avatars_UUIDNameReply);
_Client.Grid.CoarseLocationUpdate += Grid_CoarseLocationUpdate;
_Client.Network.OnCurrentSimChanged += new NetworkManager.CurrentSimChangedCallback(Network_OnCurrentSimChanged);
_Client.Objects.OnNewAvatar += new ObjectManager.NewAvatarCallback(Objects_OnNewAvatar);
_Client.Objects.OnObjectUpdated += new ObjectManager.ObjectUpdatedCallback(Objects_OnObjectUpdated);
}
void Avatars_UUIDNameReply(object sender, UUIDNameReplyEventArgs e)
{
lock (_UntrackedAvatars)
{
foreach (KeyValuePair<UUID, string> name in e.Names)
{
TrackedAvatar trackedAvatar;
if (_UntrackedAvatars.TryGetValue(name.Key, out trackedAvatar))
{
trackedAvatar.Name = name.Value;
if (OnAvatarAdded != null && trackedAvatar.ListViewItem.Text == "(Loading...)")
{
try { OnAvatarAdded(trackedAvatar); }
catch (Exception ex) { Logger.Log(ex.Message, Helpers.LogLevel.Error, Client, ex); }
}
this.BeginInvoke((MethodInvoker)delegate
{
trackedAvatar.ListViewItem.Text = name.Value;
});
}
}
}
}
void Grid_CoarseLocationUpdate(object sender, CoarseLocationUpdateEventArgs e)
{
UpdateCoarseInfo(e.Simulator, e.NewEntries, e.RemovedEntries);
@@ -387,50 +413,23 @@ namespace OpenMetaverse.GUI
}
}
void Avatars_OnAvatarAppearance(UUID avatarID, bool isTrial, Primitive.TextureEntryFace defaultTexture, Primitive.TextureEntryFace[] faceTextures, List<byte> visualParams)
void Avatars_OnAvatarAppearance(object sender, AvatarAppearanceEventArgs e)
{
if (visualParams.Count > 31)
if (e.VisualParams.Count > 31)
{
lock (_TrackedAvatars)
{
TrackedAvatar trackedAvatar;
if (_TrackedAvatars.TryGetValue(avatarID, out trackedAvatar))
if (_TrackedAvatars.TryGetValue(e.AvatarID, out trackedAvatar))
{
this.BeginInvoke((MethodInvoker)delegate
{
byte param = visualParams[31];
byte param = e.VisualParams[31];
if (param > 0)
trackedAvatar.ListViewItem.ForeColor = Color.Blue;
else
trackedAvatar.ListViewItem.ForeColor = Color.Magenta;
});
}
}
}
}
void Avatars_OnAvatarNames(Dictionary<UUID, string> names)
{
lock (_UntrackedAvatars)
{
foreach (KeyValuePair<UUID, string> name in names)
{
TrackedAvatar trackedAvatar;
if (_UntrackedAvatars.TryGetValue(name.Key, out trackedAvatar))
{
trackedAvatar.Name = name.Value;
if (OnAvatarAdded != null && trackedAvatar.ListViewItem.Text == "(Loading...)")
{
try { OnAvatarAdded(trackedAvatar); }
catch (Exception ex) { Logger.Log(ex.Message, Helpers.LogLevel.Error, Client, ex); }
}
this.BeginInvoke((MethodInvoker)delegate
{
trackedAvatar.ListViewItem.Text = name.Value;
});
});
}
}
}