client.Objects.ObjectUpdate += new EventHandler<PrimEventArgs>(Objects_ObjectUpdate);
client.Objects.KillObject += new EventHandler<KillObjectEventArgs>(Objects_KillObject);
client.Objects.ObjectProperties += new EventHandler<ObjectPropertiesEventArgs>(Objects_ObjectProperties);
+ client.Objects.ObjectPropertiesFamily += new EventHandler<ObjectPropertiesFamilyEventArgs>(Objects_ObjectPropertiesFamily);
client.Network.SimChanged += new EventHandler<SimChangedEventArgs>(Network_SimChanged);
client.Self.MuteListUpdated += new EventHandler<EventArgs>(Self_MuteListUpdated);
instance.Names.NameUpdated += new EventHandler<UUIDNameReplyEventArgs>(Avatars_UUIDNameReply);
client.Objects.ObjectUpdate -= new EventHandler<PrimEventArgs>(Objects_ObjectUpdate);
client.Objects.KillObject -= new EventHandler<KillObjectEventArgs>(Objects_KillObject);
client.Objects.ObjectProperties -= new EventHandler<ObjectPropertiesEventArgs>(Objects_ObjectProperties);
+ client.Objects.ObjectPropertiesFamily -= new EventHandler<ObjectPropertiesFamilyEventArgs>(Objects_ObjectPropertiesFamily);
client.Network.SimChanged -= new EventHandler<SimChangedEventArgs>(Network_SimChanged);
client.Self.MuteListUpdated -= new EventHandler<EventArgs>(Self_MuteListUpdated);
instance.Names.NameUpdated -= new EventHandler<UUIDNameReplyEventArgs>(Avatars_UUIDNameReply);
lstPrims.EndUpdate();
}
+ void UpdateProperties(Primitive.ObjectProperties props)
+ {
+ lock (lstPrims.Items)
+ {
+ if (lstPrims.Items.ContainsKey(props.ObjectID.ToString()))
+ {
+ Primitive prim = lstPrims.Items[props.ObjectID.ToString()].Tag as Primitive;
+ prim.Properties = props;
+ lstPrims.Items[props.ObjectID.ToString()].Text = GetObjectName(prim);
+ }
+ }
+
+ lock (lstChildren.Items)
+ {
+ if (lstChildren.Items.ContainsKey(props.ObjectID.ToString()))
+ {
+ Primitive prim = lstChildren.Items[props.ObjectID.ToString()].Tag as Primitive;
+ prim.Properties = props;
+ lstChildren.Items[props.ObjectID.ToString()].Text = prim.Properties.Name;
+ }
+ }
+
+ if (props.ObjectID == currentPrim.ID)
+ {
+ UpdateCurrentObject(false);
+ }
+ }
+
void Objects_ObjectProperties(object sender, ObjectPropertiesEventArgs e)
{
if (e.Simulator.Handle != client.Network.CurrentSim.Handle)
return;
}
- lock (lstPrims.Items)
- {
- if (lstPrims.Items.ContainsKey(e.Properties.ObjectID.ToString()))
- {
- Primitive prim = lstPrims.Items[e.Properties.ObjectID.ToString()].Tag as Primitive;
- prim.Properties = e.Properties;
- lstPrims.Items[e.Properties.ObjectID.ToString()].Text = GetObjectName(prim);
- }
- }
+ UpdateProperties(e.Properties);
+ }
- lock (lstChildren.Items)
+ void Objects_ObjectPropertiesFamily(object sender, ObjectPropertiesFamilyEventArgs e)
+ {
+ if (e.Simulator.Handle != client.Network.CurrentSim.Handle)
{
- if (lstChildren.Items.ContainsKey(e.Properties.ObjectID.ToString()))
- {
- Primitive prim = lstChildren.Items[e.Properties.ObjectID.ToString()].Tag as Primitive;
- prim.Properties = e.Properties;
- lstChildren.Items[e.Properties.ObjectID.ToString()].Text = prim.Properties.Name;
- }
+ return;
}
- if (e.Properties.ObjectID == currentPrim.ID)
+ if (InvokeRequired)
{
- UpdateCurrentObject(false);
+ BeginInvoke(new MethodInvoker(delegate() { Objects_ObjectPropertiesFamily(sender, e); }));
+ return;
}
+
+ UpdateProperties(e.Properties);
}
if (prim.Properties == null)
{
//if (prim.ParentID != 0) throw new Exception("Requested properties for non root prim");
- propRequester.RequestProps(prim.LocalID);
+ propRequester.RequestProps(prim.ID);
}
else
{
{
if (e.Prim.Properties == null)
{
- propRequester.RequestProps(e.Prim.LocalID);
+ propRequester.RequestProps(e.Prim.ID);
}
AddPrim(e.Prim);
}
{
UpdateCurrentObject(false);
}
- propRequester.RequestProps(e.Prim.LocalID);
+ propRequester.RequestProps(e.Prim.ID);
}
}
currentPrim = currentItem.Tag as Primitive;
btnBuy.Tag = currentPrim;
- if (currentPrim.Properties == null)
+ if (currentPrim.Properties == null || (currentPrim.Properties != null && currentPrim.Properties.CreatorID == UUID.Zero))
{
client.Objects.SelectObject(client.Network.CurrentSim, currentPrim.LocalID);
}
currentPrim = lstChildren.SelectedItems[0].Tag as Primitive;
btnBuy.Tag = currentPrim;
- if (currentPrim.Properties == null)
+ if (currentPrim.Properties == null || (currentPrim.Properties != null && currentPrim.Properties.CreatorID == UUID.Zero))
{
client.Objects.SelectObject(client.Network.CurrentSim, currentPrim.LocalID);
}
if (currentPrim == null) return;
var prims = client.Network.CurrentSim.ObjectsPrimitives.FindAll((Primitive p) => p.ParentID == currentPrim.LocalID);
if (prims == null || prims.Count == 0) return;
+ List<uint> toGetNames = new List<uint>();
lstChildren.BeginUpdate();
lock (lstChildren.Items)
else
{
item.Text = "Loading...";
- propRequester.RequestProps(prim.LocalID);
+ toGetNames.Add(prim.LocalID);
}
item.Tag = prim;
}
lstChildren.EndUpdate();
lstChildren.Visible = true;
+ if (toGetNames.Count > 0)
+ {
+ client.Objects.SelectObjects(client.Network.CurrentSim, toGetNames.ToArray(), true);
+ }
}
private void btnPay_Click(object sender, EventArgs e)
Object sync = new Object();
RadegastInstance instance;
System.Timers.Timer qTimer;
- Queue<uint> props = new Queue<uint>();
- List<uint> prims = new List<uint>();
+ Queue<UUID> props = new Queue<UUID>();
public delegate void TickCallback(int remaining);
public event TickCallback OnTick;
qTimer.Elapsed += new ElapsedEventHandler(qTimer_Elapsed);
}
- public void RequestProps(uint localID)
+ public void RequestProps(UUID id)
{
lock (sync)
{
- if (!props.Contains(localID))
+ if (!props.Contains(id))
{
- props.Enqueue(localID);
+ props.Enqueue(id);
}
}
}
{
lock (sync)
{
- if (prims.Count > 0)
- {
- instance.Client.Objects.DeselectObjects(instance.Client.Network.CurrentSim, prims.ToArray());
- prims.Clear();
- }
-
- for (int i = 0; i < 50 && props.Count > 0; i++)
- {
- prims.Add(props.Dequeue());
- }
-
- if (prims.Count > 0)
+ for (int i = 0; i < 25 && props.Count > 0; i++)
{
- instance.Client.Objects.SelectObjects(instance.Client.Network.CurrentSim, prims.ToArray(), false);
- prims.Clear();
+ instance.Client.Objects.RequestObjectPropertiesFamily(
+ instance.Client.Network.CurrentSim, props.Dequeue(), true);
}
if (OnTick != null)