(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 calculateBounds <>[:FlxObject T] [:FlxTypedGroup group &opt :Float margin] (unless margin (set margin 0)) (let [&mut minX 0 &mut maxX 0 &mut minY 0 &mut maxY 0 r (new FlxRect)] (group.forEach ->object (let [bounds (object.getRotatedBounds r)] (set minX (min minX bounds.left)) (set minY (min minY bounds.top)) (set maxX (max maxX bounds.right)) (set maxY (max maxY bounds.bottom)))) (r.fromTwoPoints (new FlxPoint (- minX margin) (- minY margin)) (new FlxPoint (+ maxX margin) (+ maxY margin)))))