/// <summary>
    /// (Use CallDeferred) Spawn multiple instances from PackedScene's list with a delay   (scene must ihnerits from Node2D)
    /// </summary>
    /// <param name="pDestinationNode_Deferred">The node where to add the instance (usually THIS to use CallDeferred / NULL = do not use CallDeferred)</param>
    /// <param name="pGlobalPosition">Where to display the scene spawned (NULL = do not use set a position)</param>
    /// <param name="pTiming">A Spawn_Timing object to define timing options</param>
    /// <param name="pSpawnNumber">How many instance to create</param>
    /// <param name="pRandomInstance">If true, get a random scene from the scenes loaded in Load_NewScene() method. Else, load scene in the same order</param>
    /// <param name="pGroupName">Name of the group the instance will belong</param>
    /// <returns>An instance of the scene</returns>
    public async Task <T> Add_Multiple_Instances_With_Delay <T>(Node pDestinationNode_Deferred, Vector2?pGlobalPosition, Spawn_Timing pTiming, int pSpawnNumber = 1, bool pRandomInstance = false, string pGroupName = "") where T : Node2D
    {
        if (ListScenes == null || ListScenes.Count == 0 || pSpawnNumber < 1)
        {
            return(null);
        }

        // Create the instance
        T   instance = null;
        int scene_id = 0;

        // For instances to create
        for (int i = 0; i < pSpawnNumber; i++)
        {
            // Create the delayed instance
            instance = await Add_Instance_With_Delay <T>(pDestinationNode_Deferred, pGlobalPosition, pTiming, scene_id, pGroupName);

            // Select a random scene if needed or load the next scene in the list
            if (pRandomInstance && ListScenes.Count > 1)
            {
                scene_id = Nucleus_Maths.Rnd.RandiRange(0, ListScenes.Count - 1);
            }
            else if (ListScenes.Count > 1)
            {
                scene_id = (scene_id < ListScenes.Count - 1) ? scene_id + 1 : 0;
            }
        }

        return(instance);
    }
    /// <summary>
    /// (Use CallDeferred) Spawn a single instance of the index of the PackedScene's list with a delay   (scene must ihnerits from Node2D)
    /// </summary>
    /// <param name="pDestinationNode_Deferred">The node where to add the instance (usually THIS to use CallDeferred / NULL = do not use CallDeferred)</param>
    /// <param name="pGlobalPosition">Where to display the scene spawned (NULL = do not use set a position)</param>
    /// <param name="pTiming">A Spawn_Timing object to define timing options</param>
    /// <param name="pIndexSceneToDisplay">The index of the PackedScene to display (0 by default) </param>
    /// <param name="pGroupName">Name of the group the instance will belong ("" by default)</param>
    /// <returns>An instance of the scene</returns>
    public async Task <T> Add_Instance_With_Delay <T>(Node pDestinationNode_Deferred, Vector2?pGlobalPosition, Spawn_Timing pTiming, int pIndexSceneToDisplay = 0, string pGroupName = "") where T : Node2D
    {
        if (ListScenes == null || ListScenes.Count == 0 || ListScenes[pIndexSceneToDisplay] == null)
        {
            return(null);
        }

        // Set the timing options and wait
        float spawn_time = pTiming.GetTiming();

        if (pTiming.IsTimed)
        {
            await ToSignal(GetTree().CreateTimer(spawn_time), "timeout");
        }

        // Create and return the instance
        return(Add_Instance <T>(pDestinationNode_Deferred, pGlobalPosition, pIndexSceneToDisplay, pGroupName));
    }