public IEnumerable<WoWObject> EnumVisibleObjects()
{
var first = GetFirstObject();
var typeOffset = Marshal.OffsetOf(typeof(WoWStructs.ObjectData), "ObjectType").ToInt32();
while (((first.ToInt64() & 1) == 0) && (first != IntPtr.Zero))
{
var type = (WoWEnums.ObjectType) Process.Memory.Read<int>(first + typeOffset);
// Fix below with other object types as added.
// ReSharper disable once SwitchStatementMissingSomeCases
switch (type)
{
case WoWEnums.ObjectType.Object:
yield return new WoWObject(Process, first);
break;
case WoWEnums.ObjectType.Container:
break;
case WoWEnums.ObjectType.Unit:
yield return new WoWUnit(Process, first);
break;
case WoWEnums.ObjectType.Player:
yield return new WoWPlayer(Process, first, new IntPtr(0x179A6E0));
break;
default:
yield return new WoWObject(Process, first);
break;
}
first = GetNextObjectFromCurrent(first);
}
}