428 lines
15 KiB
C#
428 lines
15 KiB
C#
using Assets.Scenes.Ride.Scripts;
|
|
using Assets.Scenes.Ride.Scripts.Model;
|
|
using Assets.Scripts;
|
|
using Assets.Scripts.Devices.Ant;
|
|
using Assets.Scripts.Scenes;
|
|
using Assets.Scripts.UI.Prefab.Device;
|
|
using DG.Tweening;
|
|
using Mapbox.Examples;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using UnityEngine.UI;
|
|
|
|
public class MainController : BaseScene
|
|
{
|
|
[SerializeField]GameObject root;
|
|
private Text Version;
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
Version = this.transform.Find("GameObject").Find("Version").GetComponent<Text>();
|
|
Version.text = "V"+App.AppVersion;
|
|
DeviceCache.Init(PFConstants.DeviceCacheFolder);
|
|
Loom.Initialize();
|
|
msg = transform.Find("GameObject/Message").GetComponent<CanvasGroup>();
|
|
InitialMessage();
|
|
#if UNITY_ANDROID || UNITY_IOS
|
|
transform.GetComponent<CanvasScaler>().referenceResolution = new Vector2(844, 390);
|
|
//transform.Find("Panel").GetComponent<RectTransform>().sizeDelta = new Vector2(844, 390);
|
|
var rectTransform = transform.Find("Panel").GetComponent<RectTransform>();
|
|
rectTransform.anchorMin = Vector2.zero;
|
|
rectTransform.anchorMax = Vector2.one;
|
|
rectTransform.offsetMin = Vector2.zero;
|
|
rectTransform.offsetMax = Vector2.zero;
|
|
//var rect1 = transform.Find("GameObject").GetComponent<RectTransform>();
|
|
//rect1.anchorMin = Vector2.zero;
|
|
//rect1.anchorMax = Vector2.one;
|
|
//rect1.offsetMin = Vector2.zero;
|
|
//rect1.offsetMax = Vector2.zero;
|
|
//transform.Find("ModalPanel").GetComponent<RectTransform>().sizeDelta = new Vector2(844, 390);
|
|
#else
|
|
var modalRect = transform.Find("ModalPanel").GetComponent<RectTransform>();
|
|
modalRect.anchorMin = new Vector2(0.5f, 0.5f);
|
|
modalRect.anchorMax = new Vector2(0.5f, 0.5f);
|
|
modalRect.offsetMin = Vector2.zero;
|
|
modalRect.offsetMax = Vector2.zero;
|
|
modalRect.sizeDelta = new Vector2(1600, 900);
|
|
App.MainDeviceAdapter.StartScan();
|
|
#endif
|
|
EventQueueSystem.AddListener<LinkedMessageEvent>(LinkedMessageHandler);
|
|
App.isHomeChanged -= OnIsHomeChanged;
|
|
App.isHomeChanged += OnIsHomeChanged;
|
|
}
|
|
#region 显示消息有关
|
|
//切换页面后
|
|
private void OnIsHomeChanged(object sender, EventArgs e)
|
|
{
|
|
DOTween.KillAll();
|
|
FinishMessage(sender);
|
|
}
|
|
|
|
CanvasGroup[] msgs;
|
|
Vector3 msgLocation;
|
|
int msgIndex = 0;
|
|
CanvasGroup rightMessage;
|
|
private void InitialMessage()
|
|
{
|
|
#if UNITY_STANDALONE_WIN
|
|
msgLocation = 1 * msg.transform.localPosition;
|
|
var msg2 = Instantiate<CanvasGroup>(msg);
|
|
var msg3 = Instantiate<CanvasGroup>(msg);
|
|
msg2.transform.SetParent(msg.transform.parent);
|
|
msg3.transform.SetParent(msg.transform.parent);
|
|
msg2.transform.localPosition = 1 * msgLocation;
|
|
msg2.transform.localScale = Vector3.one;
|
|
msg2.alpha = 0;
|
|
msg3.transform.localPosition = 1 * msgLocation;
|
|
msg3.transform.localScale = Vector3.one;
|
|
msg3.alpha = 0;
|
|
msgs = new CanvasGroup[] { msg, msg2, msg3 };
|
|
rightMessage = transform.Find("GameObject/MessageRight").GetComponent<CanvasGroup>();
|
|
#else
|
|
var go = transform.Find("GameObject");
|
|
go.GetComponent<RectTransform>().anchorMin = Vector2.zero;
|
|
go.GetComponent<RectTransform>().anchorMax = Vector2.one;
|
|
go.GetComponent<RectTransform>().offsetMax = Vector2.zero;
|
|
go.GetComponent<RectTransform>().offsetMin = Vector2.zero;
|
|
DestroyImmediate(transform.Find("GameObject/Message").gameObject);
|
|
DestroyImmediate(transform.Find("GameObject/MessageRight").gameObject);
|
|
var m = Resources.Load<GameObject>("UI/Prefab/NewRoute/Mobile/Message");
|
|
rightMessage = Instantiate<GameObject>(m).GetComponent<CanvasGroup>();
|
|
|
|
rightMessage.transform.SetParent(go);
|
|
rightMessage.transform.localScale = Vector3.one;
|
|
rightMessage.transform.localPosition = new Vector3(-112, 164, 0);
|
|
Debug.Log(rightMessage.GetComponent<RectTransform>().localPosition);
|
|
//rightMessage.transform.SetParent(transform.Find("GameObject"));
|
|
#endif
|
|
}
|
|
|
|
private void LinkedMessageHandler(LinkedMessageEvent e)
|
|
{
|
|
//msg.transform.Find("Content")
|
|
emptyt = 0;
|
|
#if UNITY_STANDALONE_WIN
|
|
Debug.Log(e.content);
|
|
if (App.currentPageIsHome)
|
|
{
|
|
DoMessage(e);
|
|
}
|
|
else
|
|
{
|
|
DoMessageRight(e);
|
|
}
|
|
#else
|
|
if (App.currentPageIsHome)
|
|
{
|
|
DoMessageRight(e);
|
|
}
|
|
#endif
|
|
}
|
|
private void DoMessageRight(LinkedMessageEvent e)
|
|
{
|
|
SetMessage(rightMessage, e);
|
|
rightMessage.DOFade(1, 0.5f).onComplete = () => Invoke("fade0", 0.8f);
|
|
}
|
|
private void DoMessage(LinkedMessageEvent e)
|
|
{
|
|
|
|
var selectIndex = msgIndex % 3;
|
|
var m = msgs[selectIndex];
|
|
if (msgIndex >= 3) //
|
|
{
|
|
//msgIndex = 0;
|
|
m.DOFade(0, 0.5f).onComplete = ()=>
|
|
{
|
|
SetMessage(m, e);
|
|
m.transform.localPosition = new Vector3(msgLocation.x, msgLocation.y - 54 * 2, msgLocation.z);
|
|
m.DOFade(1, 0.5f);
|
|
foreach (var item in msgs.Where((x, i) => i != selectIndex))
|
|
{
|
|
item.transform.DOLocalMoveY(item.transform.localPosition.y + 54, 0.5f);
|
|
}
|
|
};
|
|
}
|
|
else
|
|
{
|
|
SetMessage(m, e);
|
|
m.transform.localPosition = new Vector3(msgLocation.x, msgLocation.y - 54 * (msgIndex % 3), msgLocation.z);
|
|
m.DOFade(1, 0.5f);
|
|
}
|
|
msgIndex++;
|
|
}
|
|
void FinishMessage(object sender)
|
|
{
|
|
#if UNITY_STANDALONE_WIN
|
|
if ((bool)sender)
|
|
{
|
|
FinishMessageRight();
|
|
}
|
|
else
|
|
{
|
|
FinishMessageLeft();
|
|
}
|
|
#else
|
|
if (!(bool)sender)
|
|
{
|
|
FinishMessageRight();
|
|
}
|
|
#endif
|
|
}
|
|
void FinishMessageLeft()
|
|
{
|
|
#if UNITY_STANDALONE_WIN
|
|
msgIndex = 0;
|
|
foreach (var item in msgs)
|
|
{
|
|
item.DOFade(0, 0.3f);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void FinishMessageRight()
|
|
{
|
|
msgIndex = 0;
|
|
rightMessage.DOFade(0, 0.3f);
|
|
}
|
|
private void SetMessage(CanvasGroup m,LinkedMessageEvent e)
|
|
{
|
|
m.transform.Find("Avatar").GetComponent<RawImage>().texture = null;
|
|
Utils.DisplayHead(m.transform.Find("Avatar").GetComponent<RawImage>(), e.avatar);
|
|
m.transform.Find("Nickname").GetComponent<Text>().text = e.nickname;
|
|
m.transform.Find("Content").GetComponent<Text>().text = e.content;
|
|
}
|
|
CanvasGroup msg;
|
|
void fade0()
|
|
{
|
|
rightMessage.DOFade(0, 0.5f);
|
|
}
|
|
#endregion
|
|
// Start is called before the first frame update
|
|
async void Start()
|
|
{
|
|
|
|
UIManager.Instance.Root = root;
|
|
UIManager.Instance.MainPanel = this.transform.Find("Panel").GetComponent<PFUIPanel>();
|
|
UIManager.Instance.ModalsPanel = this.transform.Find("ModalPanel").GetComponent<PFUIPanel>();
|
|
transform.Find("MobileInfo/BatteryText").GetComponent<Text>().text =
|
|
$"{Math.Round(SystemInfo.batteryLevel * 100, 0)}%";
|
|
transform.Find("MobileInfo/TimeText").GetComponent<Text>().text =
|
|
DateTime.Now.ToString("HH:mm");
|
|
#if UNITY_EDITOR
|
|
if (App.CurrentUser == null) //App.CurrentUser == null
|
|
{
|
|
await Login();
|
|
}
|
|
#endif
|
|
//MainMenu.transform.Find("Home").GetComponent<Button>().onClick.AddListener(() =>
|
|
//{
|
|
// UIManager.ShowHomePanel();
|
|
//});
|
|
//#if UNITY_ANDROID || UNITY_IOS
|
|
// if (!App.IsRowerMode.HasValue)
|
|
// {
|
|
// UIManager.ShowRowerSelector();
|
|
// return;
|
|
// }
|
|
// if (App.IsRowerMode == true)
|
|
// {
|
|
// UIManager.ShowRowerPanel();
|
|
// return;
|
|
// }
|
|
//#endif
|
|
LastRide();//检查本地异常中断的骑行并弹窗提示继续
|
|
if (App.MainSceneParam.ContainsKey("Name") && !string.IsNullOrEmpty(App.MainSceneParam["Name"]))
|
|
{
|
|
UIManager.ShowHomePanel();
|
|
UIManager.ShowNewRouteOverviewPanel();
|
|
if (App.MainSceneParam["Name"] == "MapListPanel")
|
|
{
|
|
UIManager.ShowMapListPanel();
|
|
}
|
|
if (App.MainSceneParam["Name"] == "NewRouteDetail" && App.currentArea != null)
|
|
{
|
|
UIManager.ShowNewRouteDetailPanel(App.currentArea);
|
|
}
|
|
if (App.MainSceneParam["Name"] == "UserInfoPanel")
|
|
{
|
|
UIManager.ShowUserInfoPanel();
|
|
}
|
|
|
|
if (App.MainSceneParam["Name"] == "RaceHomePanel")
|
|
{
|
|
UIManager.ShowRaceHomePanel();
|
|
}
|
|
App.MainSceneParam["Name"] = string.Empty;
|
|
}
|
|
else
|
|
{
|
|
UIManager.ShowHomePanel();
|
|
//UIManager.ShowNewRouteOverviewPanel();
|
|
//UIManager.ShowUserInfoPanel();
|
|
//UIManager.ShowEditUserPanel();
|
|
//UIManager.ShowBigMapPanel();
|
|
//UIManager.ShowEarthPanel();
|
|
}
|
|
|
|
UIManager.UpdateJoinCompetition();//查询当前我参加的赛事
|
|
}
|
|
|
|
float maxt = 0f; //用于获取全服最值内容
|
|
float emptyt = 0;//用于无消息计时
|
|
float t = 1f;
|
|
float scanTicks = 0;
|
|
// Update is called once per frame
|
|
protected override void Update()
|
|
{
|
|
base.Update();
|
|
|
|
if (App.canvasWidth != transform.GetComponent<RectTransform>().sizeDelta.x)
|
|
{
|
|
App.canvasWidth = transform.GetComponent<RectTransform>().sizeDelta.x;
|
|
//Debug.Log(App.canvasWidth);
|
|
}
|
|
//Debug.Log(transform.GetComponent<RectTransform>().sizeDelta.x);
|
|
t -= Time.deltaTime;
|
|
while (t <= 0)
|
|
{
|
|
App.CurrentScene = "Main";
|
|
UIManager.SendCompetitionStartMessage("Main");
|
|
t = 1;
|
|
scanTicks++;
|
|
emptyt++;
|
|
if (emptyt >= 10)
|
|
{
|
|
emptyt = 0;
|
|
if (App.currentPageIsHome)
|
|
{
|
|
FinishMessageLeft();
|
|
}
|
|
}
|
|
if (scanTicks == 10)
|
|
{
|
|
//App.MainDeviceAdapter.StopScan();
|
|
//Debug.Log("StopScan");
|
|
}
|
|
MapUDPService.Send(0, App.CurrentUser.Id, new double[]{ 0d,0d}, competitionId: 0);
|
|
//发送消息
|
|
|
|
var list = MapUDPService.GetAllOnlineUserList();
|
|
foreach (var item in list)
|
|
{
|
|
if (item.RouteId > 0)
|
|
{
|
|
if (!App.RouteNameDict.ContainsKey(item.RouteId))
|
|
{
|
|
var result = ConfigHelper.mapApi.GetById(item.RouteId);
|
|
if (result.result)
|
|
{
|
|
item.RouteName = result.data.Name;
|
|
App.RouteNameDict.Add(item.RouteId, item.RouteName);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
item.RouteName = App.RouteNameDict[item.RouteId];
|
|
}
|
|
var message = "";
|
|
if (item.TotalTicks == 0)
|
|
{
|
|
message = $"发起了对<color=#ff2742>{item.RouteName}</color>的挑战";
|
|
}
|
|
if (item.IsCompleted)
|
|
{
|
|
message = $"完成了<color=#ff2742>{item.RouteName}</color>的挑战";
|
|
}
|
|
if (!string.IsNullOrEmpty(message))
|
|
{
|
|
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name), $"{item.RouteId}{item.Name}");
|
|
}
|
|
}
|
|
if (item.Point[0] == -1d)
|
|
{
|
|
var message = $"{item.Name}上线了";
|
|
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name), $"{item.Id}{item.LastActiveTime}{item.Point}");
|
|
}
|
|
//距离
|
|
if (item.EndDistance > 50)
|
|
{
|
|
var message = $"在骑行过程中突破了<color=#00ff00>{"50KM"}</color>的挑战";
|
|
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name), $"{item.RouteId}{item.Name}50KM");
|
|
}
|
|
//速度
|
|
if (item.Speed > 10)
|
|
{
|
|
var message = $"在骑行过程中速度达到了惊人的<color=#ff0000>{item.Speed}</color>KM/H";
|
|
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name), $"{item.RouteId}{item.Name}10KM/H");
|
|
}
|
|
//功体比
|
|
if (item.WeightKg > 2)
|
|
{
|
|
var message = $"在骑行过程中功体比达到了惊人的<color=#0000ff>{item.WeightKg}</color>w/kg";
|
|
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name), $"{item.RouteId}{item.Name}2WeightKg");
|
|
}
|
|
}
|
|
}
|
|
maxt -= Time.deltaTime;
|
|
if (maxt <= 0)
|
|
{
|
|
GetMaxRanking();
|
|
|
|
maxt += 60f;
|
|
}
|
|
}
|
|
|
|
private async void GetMaxRanking()
|
|
{
|
|
var res = await ConfigHelper.mapApi.GetMaxRanking();
|
|
if (res.result)
|
|
{
|
|
foreach (var item in res.data)
|
|
{
|
|
EventQueueSystem.QueueEvent(new LinkedMessageEvent(item.Id, item.Message, item.WxHeadImg, item.NickName));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private async Task Login()
|
|
{
|
|
var result = await ConfigHelper.userApi.Login("13115011550", "laozhong", "");
|
|
App.CurrentUser = result.data;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 检查上次异常中断的骑行
|
|
/// </summary>
|
|
private void LastRide()
|
|
{
|
|
var tempFileList = System.IO.Directory.GetFiles(PFConstants.MapWorkoutRecordTempFolder);
|
|
if (tempFileList.Length > 0)
|
|
{
|
|
var tempFile = tempFileList[0];
|
|
var content = System.IO.File.ReadAllText(tempFile);
|
|
if (!string.IsNullOrEmpty(content))
|
|
{
|
|
var tempRecordData = Newtonsoft.Json.JsonConvert.DeserializeObject<TempRecordData>(content);
|
|
App.tempRecordData = tempRecordData;
|
|
|
|
UIManager.ShowConfirm(App.GetLocalString("Reconnect"), App.GetLocalString("Did you want to reconnect the trip that was interrupted abnormally?"), () => { SceneManager.LoadScene("Ride"); },2,()=> {
|
|
Helper.DelectDir(PFConstants.MapWorkoutRecordTempFolder);
|
|
App.tempRecordData = null;
|
|
});
|
|
}
|
|
}
|
|
}
|
|
private void OnDestroy()
|
|
{
|
|
EventQueueSystem.RemoveListener<LinkedMessageEvent>(LinkedMessageHandler);
|
|
App.isHomeChanged -= OnIsHomeChanged;
|
|
}
|
|
}
|