SakiKawasaki il y a 4 ans
Parent
commit
a4c82391a5
2 fichiers modifiés avec 36 ajouts et 43 suppressions
  1. 19 33
      src/nodesnim/nodes2d/ysort.nim
  2. 17 10
      tests/test30.nim

+ 19 - 33
src/nodesnim/nodes2d/ysort.nim

@@ -46,6 +46,23 @@ proc YSort*(obj: var YSortObj): YSortPtr {.inline.} =
   YSort("YSort", obj)
 
 
+template childsiter() =
+  child.calcGlobalPosition()
+  var i = 0
+  let y = child.global_position.y + child.rect_size.y
+
+  if childs.len() == 0:
+    childs.add(child)
+    continue
+
+  for c in childs:
+    if c.global_position.y + c.rect_size.y > y:
+      childs.insert(child, i)
+      break
+    inc i
+  if child notin childs:
+    childs.add(child)
+
 method draw*(self: YSortPtr, w, h: GLfloat) =
   ## this method uses in the `window.nim`.
   {.warning[LockLevel]: off.}
@@ -62,41 +79,10 @@ method draw*(self: YSortPtr, w, h: GLfloat) =
 
   if self.for_all_childs:
     for child in self.getChildIter():
-      child.calcGlobalPosition()
-      var i = 0
-      let y = child.global_position.y + child.rect_size.y
-
-      if childs.len() == 0:
-        childs.add(child)
-        continue
-
-      for c in childs:
-        if c.global_position.y + c.rect_size.y > y:
-          childs.insert(child, i)
-          break
-        else:
-          childs.add(child)
-          break
-        inc i
+      childsiter()
   else:
     for child in self.children:
-      child.calcGlobalPosition()
-      var i = 0
-      let y = child.global_position.y + child.rect_size.y
-
-      if childs.len() == 0:
-        childs.add(child)
-        continue
-
-      for c in childs:
-        let y1 = c.global_position.y + c.rect_size.y
-        if y1 > y:
-          childs.insert(child, i)
-          break
-        else:
-          childs.add(child)
-          break
-        inc i
+      childsiter()
   for i in 0..childs.high:
     childs[i].z_index = i.float
 

+ 17 - 10
tests/test30.nim

@@ -12,19 +12,19 @@ var
   ysort = Ysort(ysortobj)
 
   sprite0obj: SpriteObj
-  sprite0 = Sprite(sprite0obj)
+  sprite0 = Sprite("0", sprite0obj)
 
   sprite1obj: SpriteObj
-  sprite1 = Sprite(sprite1obj)
+  sprite1 = Sprite("1", sprite1obj)
 
   sprite2obj: SpriteObj
-  sprite2 = Sprite(sprite2obj)
+  sprite2 = Sprite("2", sprite2obj)
 
   sprite3obj: SpriteObj
-  sprite3 = Sprite(sprite3obj)
+  sprite3 = Sprite("3", sprite3obj)
 
   sprite4obj: SpriteObj
-  sprite4 = Sprite(sprite4obj)
+  sprite4 = Sprite("4", sprite4obj)
 
   img0 = load("assets/anim/2.jpg")
 
@@ -35,11 +35,18 @@ sprite3.setTexture(img0)
 sprite4.setTexture(img0)
 
 
-sprite0.move(92, 92)
-sprite1.move(128, 128)
-sprite2.move(160, 160)
-sprite3.move(192, 192)
-sprite4.move(224, 224)
+sprite0.filter = Color(0xffccaaff'u32)
+sprite1.filter = Color(0xffaaccff'u32)
+sprite2.filter = Color(0xaaffccff'u32)
+sprite3.filter = Color(0xccffaaff'u32)
+sprite4.filter = Color(0xaaccffff'u32)
+
+
+sprite4.move(92, 92)
+sprite0.move(128, 128)
+sprite3.move(160, 160)
+sprite2.move(192, 192)
+sprite1.move(224, 224)
 
 ysort.addChild(sprite0)
 ysort.addChild(sprite1)