using Godot; using System.Text; using System.Collections.Generic; using System.Linq; using Rokojori.Extensions; namespace Rokojori { public static class ArrayExtensions { public static void ForEach<[MustBeVariant] T>( this Godot.Collections.Array array, System.Action action ) { for (int i = 0; i < array.Count; i++) { action( array[i] ); } } public static void ForEach<[MustBeVariant] T>( this T[] array, System.Action action ) { for (int i = 0; i < array.Length; i++) { action( array[i] ); } } public static void ForEachNonNull<[MustBeVariant] T>( this Godot.Collections.Array array, System.Action action ) where T:class { for (int i = 0; i < array.Count; i++) { if ( array[ i ] == null ) { continue; } action( array[i] ); } } public static void ForEachNonNull( this T[] array, System.Action action ) where T:class { for (int i = 0; i < array.Length; i++) { if ( array[ i ] == null ) { continue; } action( array[i] ); } } public static T Find<[MustBeVariant] T>( this Godot.Collections.Array array, System.Func evaluater, int offset = 0 ) { for ( int i = offset; i < array.Count; i++ ) { if ( evaluater( array[ i ] ) ) { return array[ i ]; } } return default(T); } public static int FindIndex<[MustBeVariant] T>( this Godot.Collections.Array array, System.Func evaluater, int offset = 0 ) { for ( int i = offset; i < array.Count; i++ ) { if ( evaluater( array[ i ] ) ) { return i; } } return -1; } } }