using LitJson; using Newtonsoft.Json; using ProjectBase.UI; using ShotSimulator.Tool; using ShotSimulator.User; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Localization.Components; using UnityEngine.UI; namespace ShotSimulator.UI { [System.Serializable] public struct RankingData { public string userName; public int avatarId; public string avatarUrl; public int rank; public int score; public bool isSelf; } public class RankingUIView : BaseUIView { public Button backButton; public Transform rankViewContent; public RankingItem selfRankingItem; public LocalizeStringEvent TimeLocalize; public LocalizeStringEvent TrainTaskLocalize; public LocalizeStringEvent DifficultyLocalize; public LocalizeStringEvent modeLocalize; public LocalizeStringEvent deviceLocalize; protected override void InitUIObjects() { base.InitUIObjects(); backButton.onClick.AddListener(OnBackButtonClick); InitTimeFilterPanel(); InitTrainTaskFilterPanel(); InitDifficultyTypeFilterPanel(); InitModeTypeFilterPanel(); InitDeviceTypeFilterPanel(); } protected override void OnShowCallBack() { base.OnShowCallBack(); GetRankingByCurrentFilter(); } private void OnBackButtonClick() { UIManager.GetInstance().HideUIView(this); UIManager.GetInstance().ShowUIView("TrainTaskInfoUIView"); } #region Time private TimeFilterType current_TimeFilterType = TimeFilterType.Week; private TimeFilterType Current_TimeFilterType { get { return current_TimeFilterType; } set { current_TimeFilterType = value; GetRankingByCurrentFilter(); } } public List m_TimeFilterToggles = new List(); public Text timeFilterTypeText; private void InitTimeFilterPanel() { for (int i = 0; i < m_TimeFilterToggles.Count; i++) { int index = i; TimeFilterType type = m_TimeFilterToggles[index].GetComponent().m_TimeFilterType; m_TimeFilterToggles[index].onValueChanged.AddListener((isOn) => { if (isOn) { Current_TimeFilterType = type; TimeLocalize.StringReference = m_TimeFilterToggles[index].GetComponentInChildren().StringReference; } }); } } #endregion #region TrainTask private TrainTaskType current_TrainTaskType = TrainTaskType.JudgeShot; private TrainTaskType Current_TrainTaskType { get { return current_TrainTaskType; } set { current_TrainTaskType = value; GetRankingByCurrentFilter(); } } public List m_TrainTaskToggles = new List(); public Text trainTaskTypeText; private void InitTrainTaskFilterPanel() { for(int i = 0; i < m_TrainTaskToggles.Count; i++) { int index = i; TrainTaskType type = m_TrainTaskToggles[index].GetComponent().m_TrainTaskType; m_TrainTaskToggles[index].onValueChanged.AddListener((isOn) => { if (isOn) { Current_TrainTaskType = type; TrainTaskLocalize.StringReference = m_TrainTaskToggles[index].GetComponentInChildren().StringReference; } }); } } #endregion #region DifficultyType private DifficultyType current_DifficultyType = DifficultyType.Standard; private DifficultyType Current_DifficultyType { get { return current_DifficultyType; } set { current_DifficultyType = value; GetRankingByCurrentFilter(); } } public List m_DifficultyTypeToggles = new List(); public Text difficultyTypeText; private void InitDifficultyTypeFilterPanel() { for (int i = 0; i < m_DifficultyTypeToggles.Count; i++) { int index = i; DifficultyType type = m_DifficultyTypeToggles[index].GetComponent().m_DifficultyType; m_DifficultyTypeToggles[index].onValueChanged.AddListener((isOn) => { if (isOn) { Current_DifficultyType = type; DifficultyLocalize.StringReference = m_DifficultyTypeToggles[index].GetComponentInChildren().StringReference; } }); } } #endregion #region Mode private ModeType current_ModeType = ModeType.NonTactical; private ModeType Current_ModeType { get { return current_ModeType; } set { current_ModeType = value; GetRankingByCurrentFilter(); } } public List m_ModeTypeToggles = new List(); public Text modeTypeText; private void InitModeTypeFilterPanel() { for (int i = 0; i < m_ModeTypeToggles.Count; i++) { int index = i; ModeType type = m_ModeTypeToggles[index].GetComponent().m_ModeType; m_ModeTypeToggles[index].onValueChanged.AddListener((isOn) => { if (isOn) { Current_ModeType = type; modeLocalize.StringReference = m_ModeTypeToggles[index].GetComponentInChildren().StringReference; } }); } } #endregion #region Device private FirearmDeviceType current_FirearmDeviceType = FirearmDeviceType.M9; private FirearmDeviceType Current_FirearmDeviceType { get { return current_FirearmDeviceType; } set { current_FirearmDeviceType = value; GetRankingByCurrentFilter(); } } public List m_DeviceTypeToggles = new List(); public Text deviceTypeTypeText; private void InitDeviceTypeFilterPanel() { for (int i = 0; i < m_DeviceTypeToggles.Count; i++) { int index = i; FirearmDeviceType type = m_DeviceTypeToggles[index].GetComponent().m_DeviceType; m_DeviceTypeToggles[index].onValueChanged.AddListener((isOn) => { if (isOn) { Current_FirearmDeviceType = type; deviceLocalize.StringReference = m_DeviceTypeToggles[index].GetComponentInChildren().StringReference; } }); } } #endregion private void GetRankingByCurrentFilter() { RankingFilter filter = new RankingFilter() { trainTaskType = Current_TrainTaskType, difficultyType = Current_DifficultyType, modeType = Current_ModeType, firearmDeviceType = Current_FirearmDeviceType, timeFilterType = Current_TimeFilterType }; UserManager.GetInstance().GetCustomLeaderboard(filter, (result) => { List datas = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(result.data, Formatting.Indented)); UpdateRankingView(datas); }); } private void UpdateRankingView(List datas) { foreach(Transform child in rankViewContent) { Destroy(child.gameObject); } selfRankingItem.Reset(); if (datas != null) { for (int i = 0; i < datas.Count; i++) { GameObject obj = Instantiate(Resources.Load("Prefabs/UI/Ranking/RankingItem")); RankingItem item = obj.GetComponent(); item.transform.SetParent(rankViewContent, false); item.SetRankData(datas[i]); if (datas[i].isSelf) { selfRankingItem.SetRankData(datas[i]); } } } } } }