1
0
Fork 0

Verification de parent recussive

This commit is contained in:
sheychen 2016-10-13 12:24:58 +02:00
parent bc1d5d53de
commit 3691ac3bf1
2 changed files with 43 additions and 24 deletions

View File

@ -11,7 +11,7 @@ namespace MyMonoGame.GUI
internal bool _isHover = false;
internal bool _isFocus = false;
internal bool isEnable = true;
public ElementLink parent;
internal ElementLink parent;
public Element(bool enable = true, ElementLink parentLink = null) {
isEnable = enable;

View File

@ -46,21 +46,49 @@ namespace MyMonoGame.GUI
}
EventArgs e = new EventArgs();
foreach (Element element in elements.Values.ToArray())
foreach (ElementLink elementLink in elements.Keys.ToArray())
{
bool isEnable = element.isEnable;
if (isEnable)
{
ElementLink parent = element.parent;
if (parent != null) { isEnable = Get(parent).isEnable; }
}
if (isEnable) {
element.Update(mouseX, mouseY, nowState, key, Keyboard.GetState().IsKeyDown(Keys.LeftShift) || Keyboard.GetState().IsKeyDown(Keys.RightShift), e);
if (IsEnable(elementLink)) {
elements[elementLink].Update(mouseX, mouseY, nowState, key, Keyboard.GetState().IsKeyDown(Keys.LeftShift) || Keyboard.GetState().IsKeyDown(Keys.RightShift), e);
}
}
}
private bool IsEnable(ElementLink elementLink)
{
bool isEnable = elements[elementLink].isEnable;
if (isEnable)
{
ElementLink actualLink = elementLink;
while (isEnable)
{
ElementLink parentLink = elements[actualLink].parent;
if (parentLink != null)
{
Element parent = Get(parentLink);
if (parent != null)
{
isEnable = parent.isEnable;
if (isEnable)
{
actualLink = parentLink;
}
}
else
{
isEnable = false;
elements.Remove(actualLink);
}
}
else
{
break;
}
}
}
return isEnable;
}
public void Clear()
{
elements.Clear();
@ -94,7 +122,6 @@ namespace MyMonoGame.GUI
}
else
{
Console.WriteLine("SetEnable Null");
throw new NullReferenceException();
}
}
@ -107,25 +134,17 @@ namespace MyMonoGame.GUI
}
else
{
Console.WriteLine("GetElement Null");
throw new NullReferenceException();
return null;
}
}
public void Draw(SpriteBatch spriteBatch)
{
foreach (Element element in elements.Values.ToArray())
foreach (ElementLink elementLink in elements.Keys.ToArray())
{
bool isEnable = element.isEnable;
if (isEnable)
if (IsEnable(elementLink))
{
ElementLink parent = element.parent;
if (parent != null) { isEnable = Get(parent).isEnable; }
}
if (isEnable)
{
element.Draw(spriteBatch);
elements[elementLink].Draw(spriteBatch);
}
}
}