int DrawObjectGroup(Graphics g, int index, ref int cursorX, ref int cursorY, ref int selectedX, ref int selectedY, ObjectGroup group, ObjectGroupEditor editor, ref List <int> objectIndices)
{
if (group == null)
{
return(index);
}
List <int> localObjectIndices = new List <int>(objectIndices);
bool foundHoveringMatch = false;
for (int i = 0; i < group.GetNumObjects(); i++)
{
ObjectData data = group.GetObjectData(i);
if (data.GetObjectType() >= ObjectType.Pointer &&
data.GetObjectType() <= ObjectType.AntiBossPointer)
{
ObjectGroup nextGroup = data.GetPointedObjectGroup();
if (nextGroup != null)
{
List <int> pointerObjectIndices = new List <int>(objectIndices);
pointerObjectIndices.Add(i);
if (editor != null && i == editor.SelectedIndex)
{
index = DrawObjectGroup(g, index, ref cursorX, ref cursorY,
ref selectedX, ref selectedY, nextGroup, editor.SubEditor, ref pointerObjectIndices);
}
else
{
index = DrawObjectGroup(g, index, ref cursorX, ref cursorY,
ref selectedX, ref selectedY, nextGroup, null, ref pointerObjectIndices);
}
if (pointerObjectIndices.Count > objectIndices.Count + 1)
{
localObjectIndices = pointerObjectIndices;
}
}
}
else
{
Color color = data.GetColor();
int x, y;
int width;
if (data.HasXY())
{
x = data.GetX();
y = data.GetY();
width = 16;
// Objects with specific positions get
// transparency
color = Color.FromArgb(0xd0, color.R, color.G, color.B);
}
else
{
// No X/Y values exist
x = index;
y = 0;
while (x >= 0xf)
{
x -= 0xf;
y++;
}
x *= 16;
y *= 16;
x += 8;
y += 8;
width = 8;
index++;
}
if (editor != null && i == editor.SelectedIndex)
{
selectedX = x - 8;
selectedY = y - 8;
}
if (mouseX >= x - 8 && mouseX < x + 8 &&
mouseY >= y - 8 && mouseY < y + 8)
{
if (localObjectIndices.Count == objectIndices.Count)
{
if (foundHoveringMatch)
{
localObjectIndices[localObjectIndices.Count - 1] = i;
}
else
{
localObjectIndices.Add(i);
}
cursorX = x - 8;
cursorY = y - 8;
foundHoveringMatch = true;
}
}
x -= width / 2;
y -= width / 2;
g.FillRectangle(new SolidBrush(color), x, y, width, width);
}
}
objectIndices = localObjectIndices;
return(index);
}