//авторизация void AuthenticateMP() { //если уже вошел - создаём игру if (IsAuthenticated) { CreateGame(); } else //авторизуемся в сервисах { Social.localUser.Authenticate((bool success) => { if (success) { LoginUpdateEvent?.Invoke(); ManagerUI.ShowMsg("Authentication successeded"); CreateGame(); } else { ManagerUI.ShowMsg("Authentication failed"); //событие завершения инициализации (прячем прогресс бар) InitMultiplayerEvent?.Invoke(false); } }); } }
void Start() { MobileAds.Initialize(APP_ID); //получаем всё менеджеры gameMng = GameManager.Instance; inputMng = InputManager.Instance; uiMng = ManagerUI.Instance; //подписка на события Subscribe_Banner(); Subscribe_Interstitial(); Subscribe_RewaedVideo(); //при выходе из игры уничножаем рекламу gameMng.QuitGameEvent += () => { if (menuBanner != null) { menuBanner.Destroy(); } if (interstitialAd != null) { interstitialAd.Destroy(); } }; }
void InitMultiplayer() { if (State != MultiplayerState.PREPARATION) { ManagerUI.ShowMsg("Room already created!"); return; } //событие, что начата инициализация мультиплеера InitMultiplayerEvent?.Invoke(true); //если включён тест, то запускаем в тестовом режиме if (GameManager.Config.isTestMP) { TestLoadRoom(); //test } else { try { AuthenticateMP(); } catch (Exception e) { AnalyticsEvent.Custom("Authenticate Multiplayer Exeption", new Dictionary <string, object> { { e.ToString(), e } }); } } }
//вызывается при выходе из комнаты public void OnLeftRoom() { ManagerUI.ShowMsg("Exit game room"); //убираем панель загрузки (если она была) InitMultiplayerEvent?.Invoke(false); //отсылаем событие об отключении от комнаты DisconectEvent?.Invoke(); }
//отсылает событие о настройке мультиплеера void MultiplayerSetup() { // Проверьте, не может ли устройство подключиться к Интернету if (Application.internetReachability == NetworkReachability.NotReachable) { ManagerUI.ShowMsg("No internet connection ..."); return; } mp_gameSetting.actionItems = new Dictionary <GameActionType, int>(); MultiplayerSetupEvent?.Invoke(); }
//подключение к комнате public void OnRoomConnected(bool success) { if (success) { LevelsResetValue(); //сбрасываем индес запускаемого уровня на начальный PreparationMultiplayerGame(); } else { ManagerUI.ShowMsg("Connection to the room failed"); MultiplayerGameExit(); InitMultiplayerEvent?.Invoke(false); //отключаем прогрессбар } }
void Login() { //если уже вошел - пропускаем if (IsAuthenticated) { return; } Social.localUser.Authenticate((bool success) => { if (success) { SetSavedGameClient(); LoginUpdateEvent?.Invoke(); ManagerUI.ShowMsg("Login successful"); } else { ManagerUI.ShowMsg("Login failed :("); } }); }
//Покупка public void PurchaseInGameProduct(int indexProduct, bool purchaseStatus) { var item = data.itemBalls[indexProduct]; if (item == null) { Debug.Log(string.Format("There is no such product {0}", indexProduct)); return; } //если товар куплен - то просто выбираем его if (purchaseStatus) { ChangePurchasedBallEvent?.Invoke(indexProduct); ManagerUI.ShowMsg("^_^ Item is buyed ^_^"); AudioManager.Instance.Play(StaticPrm.SOUND_CLICK_BUTTON); return; } else //товар не куплен - пробуем купить, если хватит средств { var cost = data.itemBalls[indexProduct].costItem; var myMoney = GameManager.CurrentGame.MoneyCount; if (myMoney >= cost) { var ball = data.itemBalls[indexProduct]; ball.isBuyed = true; //отмечаем, что товар купили BuyNewBallEvent?.Invoke(indexProduct, cost); AudioManager.Instance.Play(StaticPrm.SOUND_PURCHASE); } else { ManagerUI.ShowMsg("No gems :((("); AudioManager.Instance.Play(StaticPrm.SOUND_NO_MONEY); } } }
//записывает данные старта приложения void RememberAppStart() { CurrentGame.StatisticGame.CountLaunchApp++; //добавляем счётчик запусков приложения var lastDate = DateTime.Parse(CurrentGame.DateLastVisit); var diff = DateTime.Now - lastDate; //если разница в один день - увелициваем серию if (diff.Days == 1) { CurrentGame.StatisticGame.DailyGameSeries++; } else { //обнуляем счётчик серии дней CurrentGame.StatisticGame.DailyGameSeries = 0; } //награда за новый запуск (если прошло больше суток) if (diff.Days >= 1) { RewardPlayer(RewardType.EVERYDAY); } //проверка на достижение CheckingPlayingSeries(); //записываем текущую дату CurrentGame.DateLastVisit = DateTime.Now.ToString(); SaveGame(); //сообщение об количестве дней которое игрок отсутствовал ManagerUI.ShowMsg(string.Format("You were absent: [{0}] days [{1}] h [{2}] min", diff.Days, diff.Hours, diff.Minutes)); }
//тестовая загрузка кумнаты для игры по сети void TestLoadRoom() { ManagerUI.ShowMsg("Test multiplayer in editor"); StartCoroutine(TestConnectRoom(3f)); }
//вызывается при отключении одного из участников public void OnPeersDisconnected(string[] participantIds) { ManagerUI.ShowMsg("Opponent left the room"); MultiplayerGameExit(); }
//вызывается при подключении нового участника public void OnPeersConnected(string[] participantIds) { ManagerUI.ShowMsg("New player connected"); }
//вызывается при отклонении опонентом приглашения поиграть public void OnParticipantLeft(Participant participant) { ManagerUI.ShowMsg("Your invitation has been declined"); MultiplayerGameExit(); }