Files
kiss-flixel/src/kiss_flixel/GroupTools.kiss

39 lines
1.7 KiB
Plaintext

(function :Void bringToFront <>[:FlxObject T] [:FlxTypedGroup<T> group :T obj]
(when (contains group.members obj)
(group.members.remove obj)
(group.members.push obj)))
(function :Void sendToBack <>[:FlxObject T] [:FlxTypedGroup<T> group :T obj]
(when (contains group.members obj)
(group.remove obj)
(group.insert 0 obj)))
(function :Void bringAllToFront <>[:FlxObject T] [:FlxTypedGroup<T> group :Array<T> arr]
(doFor s (group.members.copy)
(when (contains arr s) (bringToFront group s))))
(function :Void sendAllToBack <>[:FlxObject T] [:FlxTypedGroup<T> group :Array<T> arr]
(doFor s (reverse (group.members.copy))
(when (contains arr s) (sendToBack group s))))
(function :FlxRect calculateScreenBounds <>[:FlxSprite T] [:FlxTypedGroup<T> 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)))