105 lines
3.9 KiB
C#

using Assets.Scenes.Ride.Scripts.Model;
using Assets.Scripts.Apis;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
namespace Assets.Scenes.Ride.Scripts
{
public class ReviewFactory : MonoBehaviour
{
private CyclingController cyclingController;
private GameObject singleArea;
private GameObject reviewScrollView;
private GameObject reviewItem;
private GameObject content;
private GameObject otherPlayer;
private GameObject miniMapPlayer;
private MapApi mapApi;
private PlayerController playerController;
private List<ReviewItemScript> reviewList ;
private List<OtherPlayerController> otherList;
private void Awake()
{
reviewList = new List<ReviewItemScript>();
otherList = new List<OtherPlayerController>();
cyclingController = FindObjectOfType<CyclingController>();
singleArea = transform.Find("SingleArea").gameObject;
reviewScrollView = transform.Find("ReviewArea").gameObject;
content = transform.Find("ReviewArea/ReviewScrollView/Viewport/Content").gameObject;
reviewItem = Resources.Load<GameObject>("UI/Prefab/Ride/ReviewItem");
otherPlayer = Resources.Load<GameObject>("UI/Prefab/Ride/ReviewPlayer");
miniMapPlayer = Resources.Load<GameObject>("UI/Prefab/Ride/MiniMapPlayer");
playerController = FindObjectOfType<PlayerController>();
mapApi = new MapApi();
}
private void Start()
{
Refresh();
}
public void Refresh()
{
var mode = cyclingController.cyclingModel;
switch (mode)
{
case Model.CyclingModel.Single:
singleArea.SetActive(true);
reviewScrollView.SetActive(false);
break;
case Model.CyclingModel.Review:
singleArea.SetActive(false);
InitReview();
break;
}
}
float t = 1;
private void Update()
{
t -= Time.deltaTime;
while (t < 0)
{
ReviewRanking();
t = 1;
}
}
private void ReviewRanking()
{
var sortList = reviewList.OrderByDescending(c => c.GetDistance()).ToList();
for (int i = 0; i < sortList.Count; i++)
{
var item = sortList[i].gameObject.transform;
item.SetSiblingIndex(i);
}
}
private void InitReview()
{
reviewScrollView.SetActive(true);
var rankingList = mapApi.GetRecordFileFromServer(cyclingController.selectParamModel.RankingsId);
foreach (var item in rankingList)
{
GameObject newObj = (GameObject)Instantiate(reviewItem, content.transform);
var reviewItemScript = newObj.GetComponent<ReviewItemScript>();
reviewItemScript.SetHead(item.WxHeadImg);
reviewItemScript.SetName(item.NickName);
reviewItemScript.SetDistance(0D);
reviewList.Add(reviewItemScript);
GameObject otherPlayerObj = (GameObject)Instantiate(otherPlayer, transform.parent.parent.parent);
var otherPlayerController = otherPlayerObj.GetComponent<OtherPlayerController>();
otherList.Add(otherPlayerController);
otherPlayerController.record = item.record;
otherPlayerController.SetController(reviewItemScript);
GameObject miniPlayer = (GameObject)Instantiate(miniMapPlayer, transform.parent.parent.parent);
var miniController = miniPlayer.GetComponent<MiniMapPlayerController>();
miniController.SetController(otherPlayerController);
}
}
}
}