(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 :FlxRect calculateScreenBounds <>[:FlxSprite T] [:FlxTypedGroup group &opt :FlxCamera camera :Float margin] (unless margin (set margin 0)) (let [s (group.getFirstAlive) 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)))))