Verification de parent recussive
This commit is contained in:
parent
bc1d5d53de
commit
3691ac3bf1
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue