(function :Void bringToFront <>[:FlxObject T] [:FlxTypedGroup group :T obj] (when (contains group.members obj) (group.members.remove obj) (group.members.push obj))) (function :Void sendToBack <>[:FlxObject T] [:FlxTypedGroup group :T obj] (when (contains group.members obj) (group.remove obj) (group.insert 0 obj))) (function :Void bringAllToFront <>[:FlxObject T] [:FlxTypedGroup group :Array arr] (doFor s (group.members.copy) (when (contains arr s) (bringToFront group s)))) (function :Void sendAllToBack <>[:FlxObject T] [:FlxTypedGroup group :Array arr] (doFor s (reverse (group.members.copy)) (when (contains arr s) (sendToBack group s)))) (function :FlxRect calculateScreenBounds <>[:FlxSprite T] [:FlxTypedGroup group &opt :FlxCamera camera :Float margin] (unless margin (set margin 0)) (ifLet [s (group.getFirstAlive)] (let [r (new FlxRect) bounds (s.getScreenBounds r camera) &mut minX bounds.left &mut maxX bounds.right &mut minY bounds.top &mut maxY bounds.bottom] (group.forEach ->sprite (let [bounds (sprite.getScreenBounds r camera)] (setMin minX bounds.left) (setMin minY bounds.top) (setMax maxX bounds.right) (setMax maxY bounds.bottom))) (r.fromTwoPoints (new FlxPoint (- minX margin) (- minY margin)) (new FlxPoint (+ maxX margin) (+ maxY margin)))) (new FlxRect 0 0 0 0)))