more efficient and correct bringToFront/sendToBack

This commit is contained in:
2022-07-26 19:37:45 +00:00
parent a8fd35b041
commit f09028419d

View File

@@ -1,17 +1,12 @@
(function :Void clearNulls <>[:FlxObject T] [:FlxTypedGroup<T> group]
(while (contains group.members null)
(group.members.splice (group.members.lastIndexOf null) 1)))
// Because FlxGroup will fill elements into null gaps in groups, this method inefficiently clears null gaps
(function :Void bringToFront <>[:FlxObject T] [:FlxTypedGroup<T> group :T obj] (function :Void bringToFront <>[:FlxObject T] [:FlxTypedGroup<T> group :T obj]
(group.remove obj true) (when (contains group.members obj)
(clearNulls group) (group.members.remove obj)
(group.add obj)) (group.members.push obj)))
// Because FlxGroup will fill elements into null gaps in groups, this method throws an error when a null gap is present
(function :Void sendToBack <>[:FlxObject T] [:FlxTypedGroup<T> group :T obj] (function :Void sendToBack <>[:FlxObject T] [:FlxTypedGroup<T> group :T obj]
(group.remove obj true) (when (contains group.members obj)
(group.insert 0 obj)) (group.remove obj)
(group.insert 0 obj)))
(function :FlxRect calculateBounds <>[:FlxObject T] [:FlxTypedGroup<T> group &opt :Float margin] (function :FlxRect calculateBounds <>[:FlxObject T] [:FlxTypedGroup<T> group &opt :Float margin]
(unless margin (set margin 0)) (unless margin (set margin 0))