public void OnNotify(Firebase.Database.DataSnapshot dataSnapShot) { try { Dictionary <string, System.Object> rpcReceive = (Dictionary <string, System.Object>)dataSnapShot.Value; if (rpcReceive.ContainsKey(MyConst.RPC_DATA_PARAM)) { bool userHome = (bool)rpcReceive [MyConst.RPC_DATA_USERHOME]; Dictionary <string, System.Object> param = (Dictionary <string, System.Object>)rpcReceive [MyConst.RPC_DATA_PARAM]; if (param.ContainsKey(MyConst.RPC_DATA_CHARACTER)) { CharacterModelList characterList = JsonUtility.FromJson <CharacterModelList> (param [MyConst.RPC_DATA_CHARACTER].ToString()); Queue <CharacterModel> characterReceiveQueue = new Queue <CharacterModel> (); for (int i = 0; i < characterList.list.Count; i++) { if (characterList.list [i].iD != 0) { characterReceiveQueue.Enqueue(characterList.list [i]); } } if (characterReceiveQueue.Count > 0) { if (userHome.Equals(GameManager.isHost)) { playerCharacterQueue = characterReceiveQueue; } else { enemyCharacterQueue = characterReceiveQueue; } } BattleManager.CountCharacters(); } } } catch (System.Exception e) { //do something with exception in future } }
//send characters used to firebase public static void StartCharacters() { List <CharacterModel> charactersToSend = new List <CharacterModel> (); Dictionary <int, int> result = new Dictionary <int, int> (); for (int i = 0; i < currentCharacterInEquip.Length; i++) { //if gp is enough, send character to firebase and remove from equip PlayerManager.SetIsPlayer(true); bool isCardValid = false; ScreenBattleController.Instance.partCharacter.GetCharCards() [i].CheckCard(delegate(bool arg1, int arg2) { if (arg1) { isCardValid = true; result.Add(arg2, i); } else { isCardValid = false; } }); if (isCardValid == false) { continue; } } //sort result according to priority number of character in equip if (result.Count > 0) { var list = result.Keys.ToList(); list.Sort(); foreach (var key in list) { if (PlayerManager.Player.gp >= currentCharacterInEquip [result[key]].gpCost) { Debug.Log("SENDING TO FIREBASE CHARACTER " + currentCharacterInEquip [result[key]].name); PlayerManager.Player.gp -= currentCharacterInEquip [result[key]].gpCost; charactersToSend.Add(currentCharacterInEquip [result[key]]); ActivateCharacterUI(result[key]); PlayerManager.UpdateStateUI(true); } else { Debug.Log("NOT ENOUGH GP FOR CHARACTER " + currentCharacterInEquip [result[key]].name); } } } CharacterModelList characterList = new CharacterModelList(); characterList.list = charactersToSend; SystemFirebaseDBController.Instance.SetParam(MyConst.RPC_DATA_CHARACTER, (characterList)); //reset card used effect for (int i = 0; i < ScreenBattleController.Instance.partCharacter.GetCharCards().Length; i++) { ScreenBattleController.Instance.partCharacter.GetCharCards() [i].ResetCardUsed(); } }