0

In my project I am loading various players from my database before entering my gamescene. The problem is I go to various places to load different variables. Is it possible to set some sort of return statement to make a function wait to continue until after each firebase function is done loading? This is the big function that calls various small ones. This I'm sure is a quick fix I just am new to Firebase. Thanks in advance!

 //quickevent
            loading.isHidden = false
            gameType = 3
            isMainCard = false
            let mainCardFighterInt = Int(arc4random_uniform(3)) + 1
            let undercardFighterInt = Int(arc4random_uniform(5)) + 1
            if mainCardFighterInt == 1 {
                mainCardFighter.ID = USfighter1.ID
            }
            if mainCardFighterInt == 2 {
                mainCardFighter.ID = USfighter2.ID
            }
            if mainCardFighterInt == 3 {
                mainCardFighter.ID = USfighter3.ID
            }
            loadMainCardForFight()
            //set underCard Fighter now
            if undercardFighterInt == 1 {
                underCardFighter.ID = USfighter4.ID
            }
            if undercardFighterInt == 2 {
                underCardFighter.ID = USfighter5.ID
            }
            if undercardFighterInt == 3 {
                underCardFighter.ID = USfighter6.ID
            }
            if undercardFighterInt == 4 {
                underCardFighter.ID = USfighter7.ID
            }
            if undercardFighterInt == 5 {
                underCardFighter.ID = USfighter8.ID
            }
            loadUnderCardForFight()

            //find what guy you are playing
            findMainCard = false
            let randomForUndercard = Int(arc4random_uniform(100)) + 1
            if randomForUndercard >= 95 {
                findGoldPlayerToFight()
            }
            if randomForUndercard >= 55 && randomForUndercard <= 94 {
                findSilverPlayerToFight()
            }
            if randomForUndercard <= 54 {
                findBronzePlayerToFight()
            }
            loadOpponentUnderCard()
            //find main card now
            findMainCard = true
            let randomForMainCard = Int(arc4random_uniform(100)) + 1
            if randomForMainCard >= 95 {
                findDiamondPlayerToFight()
            }
            if randomForMainCard >= 65 && randomForMainCard <= 94 {
                findElitePlayerToFight()
            }
            if randomForMainCard <= 64 {
                findGoldPlayerToFight()
            }
            loadOpponentMainCard()

            //Actually enter game
            let nextScene = GameScene(fileNamed: "GameScene")
            nextScene!.scaleMode = scaleMode
            self.view?.presentScene(nextScene)

The functions that load from firebase (if this is relevant) are: loadMainCardForFight, loadUnderCardForFight, findGoldPlayerToFight (bronze and the others), loadOpponentUndercard and loadOpponentMainCard.

CODE AFTER SUGGESTIONS, new error: takes infinate time to load. This is the code

 //quickevent
            loading.isHidden = false
            gameType = 3
            isMainCard = false
            let mainCardFighterInt = Int(arc4random_uniform(3)) + 1
            let undercardFighterInt = Int(arc4random_uniform(5)) + 1
            if mainCardFighterInt == 1 {
                mainCardFighter.ID = USfighter1.ID
            }
            if mainCardFighterInt == 2 {
                mainCardFighter.ID = USfighter2.ID
            }
            if mainCardFighterInt == 3 {
                mainCardFighter.ID = USfighter3.ID
            }
            loadMainCardForFight{
                //set underCard Fighter now
                if undercardFighterInt == 1 {
                    underCardFighter.ID = USfighter4.ID
                }
                if undercardFighterInt == 2 {
                    underCardFighter.ID = USfighter5.ID
                }
                if undercardFighterInt == 3 {
                    underCardFighter.ID = USfighter6.ID
                }
                if undercardFighterInt == 4 {
                    underCardFighter.ID = USfighter7.ID
                }
                if undercardFighterInt == 5 {
                    underCardFighter.ID = USfighter8.ID
                }
                self.loadUnderCardForFight{
                    //find what guy you are playing
                    findMainCard = false/*
                     let randomForUndercard = Int(arc4random_uniform(100)) + 1
                     if randomForUndercard >= 95 {
                     findGoldPlayerToFight()
                     }
                     if randomForUndercard >= 55 && randomForUndercard <= 94 {
                     findSilverPlayerToFight()
                     }
                     if randomForUndercard <= 54 {
                     findBronzePlayerToFight()
                     }*/
                    //findBronzePlayerToFight{
                    //
                    //}
                    opponentUnderCard.ID = 26
                    self.loadOpponentUnderCard{
                        //find main card now
                        findMainCard = true
                        /*let randomForMainCard = Int(arc4random_uniform(100)) + 1
                         if randomForMainCard >= 95 {
                         findDiamondPlayerToFight()
                         }
                         if randomForMainCard >= 65 && randomForMainCard <= 94 {
                         findElitePlayerToFight()
                         }
                         if randomForMainCard <= 64 {
                         findGoldPlayerToFight()
                         }*/
                        opponentMainCard.ID = 26
                        self.loadOpponentMainCard{
                            //Actually enter game
                            let nextScene = GameScene(fileNamed: "GameScene")
                            nextScene!.scaleMode = self.scaleMode
                            self.view?.presentScene(nextScene)
                        }

                    }
                }
            }
        }
Peter
  • 87
  • 7

1 Answers1

2

As mentioned in comments completion block is the way to go.

func loadPlayers(completion: @escaping() -> Void){
//FIRE BASE STUFF......

//done firebase

completion()
}

Use it like this:

loadPlayers{
// This will execute until firebase is done
}
Sergio Trejo
  • 632
  • 8
  • 23