/// <summary> /// Создать запись /// </summary> public void Create(SuccessGrade grade, ActionType action) { Author.text = $"{TweeterData.Nicknames[Random.Range(0, TweeterData.Nicknames.Count)]}"; Comment.text = GetComment(grade, action); Likes.text = $"Likes: {Random.Range(0, 200)}"; Views.text = $"Views: {Random.Range(0, 3000)}"; }
/// <summary> /// Возвращает нужный фон окна /// </summary> private Sprite GetSprite(ActionType type, SuccessGrade grade) { switch (type) { case ActionType.NewTrack: case ActionType.Feat: return(WindowSprites[ActionSpriteKey.TRACK]); case ActionType.NewClip: return(WindowSprites[ActionSpriteKey.CLIP]); case ActionType.Concert: var concertKey = grade <SuccessGrade.Middle ?ActionSpriteKey.BAD_CONCERT : grade> SuccessGrade.Middle ? ActionSpriteKey.SUCCESS_CONCERT : ActionSpriteKey.NORMAL_CONCERT; return(WindowSprites[concertKey]); case ActionType.Battle: var battleKey = grade >= SuccessGrade.Middle ? ActionSpriteKey.WIN_BATTLE : ActionSpriteKey.LOSE_BATTLE; return(WindowSprites[battleKey]); default: return(WindowSprites[ActionSpriteKey.DEFAULT]); } }
/// <summary> /// Добавляет запись в ленту /// </summary> public void AddTweet(SuccessGrade grade, ActionType action) { var newObject = ObjectPool.GetObject(); newObject.transform.localScale = scale; newObject.GetComponent <Tweet>().Create(grade, action); if (tweets.Count == 50) { tweets.RemoveAt(0); } tweets.Add(newObject); RefreshFeed(); }
/// <summary> /// Обработчик победной заставки на батле /// </summary> private void ProcessWinScreen(SuccessGrade grade) { var playerInfo = PlayerManager.GetInfo(); if (!playerInfo.BattleScreenWin && battleModel.Rival.Name == "Oxxxymiron" && grade > SuccessGrade.Middle) { BattleWinImage.GetComponentsInChildren <Text>().First(e => e.name == "Content").text = "Это историческая х@#%я! Вы одержали победу над одним из лучших батл МС и присоединились к касте элиты батл рэпа. " + "Многие до сих пор не могут поверить, что это произошло!"; BattleWinImage.gameObject.SetActive(true); playerInfo.BattleScreenWin = true; } }
/// <summary> /// Возвращает результат съемок /// </summary> private ActionResultModel GetClipResult(SuccessGrade grade) { var gradePercent = GradePercentManager.GetRewardPercent(grade, ActionType.NewClip); var fansPercentValue = PlayerManager.GetFansPercentValue(); var featBonus = _clip.Track.Feat?.Fans / 150 ?? 0; return(new ActionResultModel { Action = ActionType.NewClip, FansIncrease = CalculateStatIncrease(gradePercent, fansPercentValue, 0.1f) + featBonus, Income = CalculateStatIncrease(gradePercent, fansPercentValue, 0.2f) * Random.Range(3, 5), Popularity = CalculateStatIncrease(gradePercent, fansPercentValue, 0.1f) * Random.Range(2, 5), Grade = grade }); }
/// <summary> /// Возвращает результат трэка /// </summary> private ActionResultModel GetTrackResult(SuccessGrade grade) { var gradePercent = GradePercentManager.GetRewardPercent(grade, ActionType.NewTrack); var fansPercentValue = PlayerManager.GetFansPercentValue(); var featBonus = _track.Feat?.Fans / 150 ?? 0; return(new ActionResultModel { Action = _track.Feat == null ? ActionType.NewTrack : ActionType.Feat, FansIncrease = CalculateStatIncrease(gradePercent, fansPercentValue, 0.1f) + featBonus, Income = CalculateStatIncrease(gradePercent, fansPercentValue, 0.2f) * Random.Range(3, 6), Top = PlayerManager.GetInfo().Fans >= 50000 ? GetPlaceInTop(grade) : -1, Popularity = CalculateStatIncrease(gradePercent, fansPercentValue, 0.1f) * Random.Range(2, 5), Grade = grade }); }
/// <summary> /// Возвращает результат съемок /// </summary> private ActionResultModel GetBattleResult(SuccessGrade grade) { var gradePercent = GradePercentManager.GetRewardPercent(grade, ActionType.Battle); var fansPercentValue = PlayerManager.GetFansPercentValue(); var income = CalculateStatIncrease(gradePercent, fansPercentValue, 0.1f); var rivalFansBonus = battleModel.Rival.Fans * 5; return(new ActionResultModel { Action = ActionType.Battle, FansIncrease = CalculateStatIncrease(gradePercent, fansPercentValue, 0.2f) / 3, Income = income > 0 ? income : 0, Popularity = Math.Abs(CalculateStatIncrease(gradePercent, fansPercentValue, 0.1f) * 5 + rivalFansBonus), Grade = grade }); }
/// <summary> /// Возвращает место в топе /// </summary> private static int GetPlaceInTop(SuccessGrade grade) { if (grade == SuccessGrade.Highest) { return(Random.Range(1, 10)); } if (grade == SuccessGrade.Hight) { return(Random.Range(11, 40)); } if (grade == SuccessGrade.Middle) { return(Random.Range(41, 90)); } if (grade == SuccessGrade.Low) { return(Random.Range(91, 200)); } return(-1); }
/// <summary> /// Возвращает процент награды для трэка /// </summary> public static float GetRewardPercent(SuccessGrade grade, ActionType type) { var percent = 0f; switch (type) { case ActionType.NewTrack: case ActionType.Feat: percent = trackPercents[grade]; break; case ActionType.NewClip: percent = clipPercents[grade]; break; case ActionType.Battle: percent = battlePercents[grade]; break; } return(percent * GetFansCoef()); }
/// <summary> /// Возвращает сообщение успешности для /// </summary> private static string GetBattleTopMessage(SuccessGrade grade) { switch (grade) { case SuccessGrade.Lowest: return("Разгромное поражение. У вас не было шансов"); case SuccessGrade.Low: return("У вас была пара хороших моментов, но в целом все выглядело слабее, чем у соперника"); case SuccessGrade.Middle: return("Неоднозначный батл. Каждый зритель решил для себя сам, кто победил"); case SuccessGrade.Hight: return("Это была практически равная битва, но все же вы оказались сильнее"); case SuccessGrade.Highest: return("Вы уничтожили оппонента! Ему просто нечего было предоставить в ответ"); default: throw new ArgumentOutOfRangeException(nameof(grade), grade, null); } }
/// <summary> /// Возвращает сообщение успешности для /// </summary> private static string GetConcertTopMessage(SuccessGrade grade) { switch (grade) { case SuccessGrade.Lowest: return("Концерт провалился, зал был пуст..."); case SuccessGrade.Low: return("Пришло очень мало людей, но это лучше, чем ничего!"); case SuccessGrade.Middle: return("Неплохо! Вам удалось заполнить зал наполовину"); case SuccessGrade.Hight: return("В зале было совсем немного свободных мест. Хороший результат!"); case SuccessGrade.Highest: return("Это солд-аут! Зал битком забит людьми, а на улице огромная очередь желающих попасть внутрь. Оглушительный успех!"); default: throw new ArgumentOutOfRangeException(nameof(grade), grade, null); } }
/// <summary> /// Возвращает комментарий /// </summary> private static string GetComment(SuccessGrade grade, ActionType action) { var comments = TweeterData.Comments[action][grade]; return(comments[Random.Range(0, comments.Count)]); }