powerfun-unity/Assets/Scripts/Scenes/MainController.cs
2022-01-11 11:18:09 +08:00

528 lines
20 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
Debug.Log("执行25");
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;
transform.Find("GameObject/Version").gameObject.SetActive(false);
//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);
}
List<CanvasGroup> msgs;
Vector3 msgLocation;
int msgIndex = 0;
CanvasGroup rightMessage;
private void InitialMessage()
{
#if UNITY_STANDALONE_WIN
msgLocation = 1 * msg.transform.localPosition;
var go = transform.Find("GameObject");
rightMessage = Instantiate<CanvasGroup>(msg);
DestroyImmediate(transform.Find("GameObject/Message").gameObject);
rightMessage.transform.SetParent(go);
rightMessage.transform.localScale = Vector3.one;
rightMessage.transform.localPosition = 1 * msgLocation;
rightMessage.alpha = 0;
msgs = new List<CanvasGroup> { rightMessage };
for (int i = 0; i < 4; i++)
{
var tmpm = Instantiate<CanvasGroup>(rightMessage);
tmpm.transform.SetParent(rightMessage.transform.parent);
tmpm.transform.localPosition = 1 * msgLocation;
tmpm.transform.localScale = Vector3.one;
tmpm.alpha = 0;
msgs.Add(tmpm);
}
#else
msgLocation = new Vector3(168, 37-46, 0);
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 = 1 * msgLocation;
rightMessage.alpha = 0;
msgs = new List<CanvasGroup> { rightMessage };
for (int i = 0; i < 4; i++)
{
var tmpm = Instantiate<CanvasGroup>(rightMessage);
tmpm.transform.SetParent(rightMessage.transform.parent);
tmpm.transform.localPosition = 1 * msgLocation;
tmpm.transform.localScale = Vector3.one;
tmpm.alpha = 0;
msgs.Add(tmpm);
}
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)
// {
// DoMessage6(e);
// }
//#endif
if (App.currentPageIsHome)
{
DoMessage6(e);
}
}
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++;
}
#if UNITY_STANDALONE_WIN
float moveOffset = 46;
#else
float moveOffset = 38;
#endif
private void DoMessage6(LinkedMessageEvent e)
{
var selectIndex = msgIndex % 5;
var m = msgs[selectIndex];
if (msgIndex >= 5) //
{
//msgIndex = 0;
Sequence se = DOTween.Sequence();
//m.transform.DOLocalMoveY(m.transform.localPosition.y - 38, 0.5f);
foreach (var item in msgs)
{
se.Join(item.transform.DOLocalMoveY(item.transform.localPosition.y - moveOffset, 0.5f));
}
se.Join(m.DOFade(0, 0.5f));
se.Play().onComplete = () =>
{
SetMessage(m, e);
m.transform.localPosition = 1 * msgLocation;
m.DOFade(1, 0.5f);
};
}
else
{
Debug.Log(191);
SetMessage(m, e);
Sequence se = DOTween.Sequence();
for (int i = 0; i < msgIndex; i++)
{
var rect = msgs[i].GetComponent<RectTransform>();
se.Join(rect.DOLocalMoveY(rect.localPosition.y - moveOffset, 0.5f));
}
se.Join(m.DOFade(1, 0.5f));
se.Play();
}
m.transform.SetAsLastSibling();
msgIndex++;
}
void FinishMessage(object sender)
{
if (!(bool)sender)
{
//FinishMessage6();
//DOTween.CompleteAll(true);
DOTween.CompleteAll(true);
transform.Find("GameObject").gameObject.SetActive(false);
}
else
{
transform.Find("GameObject").gameObject.SetActive(true);
}
//#if UNITY_STANDALONE_WIN
// if ((bool)sender)
// {
// FinishMessageRight();
// }
// else
// {
// FinishMessageLeft();
// }
//#else
//#endif
}
void FinishMessageLeft()
{
//#if UNITY_STANDALONE_WIN
// msgIndex = 0;
// if (msgs != null)
// {
// foreach (var item in msgs)
// {
// item.DOFade(0, 0.3f);
// }
// }
//#endif
}
void FinishMessageRight()
{
msgIndex = 0;
rightMessage.DOFade(0, 0.3f);
}
void FinishMessage6()
{
msgIndex = 0;
foreach (var m in msgs)
{
m.alpha = 0;
m.GetComponent<RectTransform>().localPosition = 1 * msgLocation;
}
}
private void SetMessage(CanvasGroup m,LinkedMessageEvent e)
{
m.GetComponent<Button>().onClick.RemoveAllListeners();
m.GetComponent<Button>().onClick.AddListener(()=>
{
if (e.routeId > 0)
{
var res = ConfigHelper.mapApi.GetById(e.routeId);
if (res.result)
{
UIManager.ShowStartRideModal(res.data);
}
//UIManager.ShowConfirm(App.GetLocalString("RIDE NOW"), App.GetLocalLanguage() == "zh"? $"<color=#fff>是否要加入</color><color=#f93086>{e.routeName}</color><color=#fff>骑行?</color>" :$"<color=#fff>Join</color> <color=#f93086>{e.routeName}</color><color=#fff>?</color>", () =>
// {
// App.RouteIdParam = e.routeId;
// SceneManager.LoadScene("Ride");
// });
}
//Debug.Log(e.routeId);
});
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;
var txt = m.transform.Find("TextContainer/Content").GetComponent<RectTransform>();
txt.GetComponent<Text>().text = e.content;
LayoutRebuilder.ForceRebuildLayoutImmediate(txt);
Debug.Log(e.content + txt.sizeDelta.x);
m.GetComponent<HomeMessageController>().Initial();
m.GetComponent<HomeMessageController>().textWidth = txt.sizeDelta.x;
}
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 UNITY_ANDROID || UNITY_IOS
UIManager.ShowResultListPanel();
#endif
}
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 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();
var lang = App.GetLocalLanguage();
foreach (var item in list)
{
if (item.Point != null && item.Point.Length > 0 && item.Point[0] == -1d)
{
var message = lang == "zh" ? $"{item.Name}进入了 运动地球" : "entered PowerFun";
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(-1, message, item.HeadImage, item.Name, item.RouteName), $"{item.Id}{item.LastActiveTime}{item.Point}");
}
if (item.RouteId > 0)
{
var message = "";
if (item.TotalTicks == 0 && item.PreDistance == 0)
{
message = lang=="zh"?$"发起了对<color=#f93086>{item.RouteName}</color>的挑战!" : $"started riding <color=#f93086>{item.RouteName}</color>!";
}
if (item.IsCompleted)
{
message = lang == "zh" ? $"完成了<color=#f93086>{item.RouteName}</color>的挑战!" : $"completed <color=#f93086>{item.RouteName}</color> ride!";
}
if (!string.IsNullOrEmpty(message))
{
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name,item.RouteName), $"{item.RouteId}{item.Name}");
}
}
//距离50
if (item.EndDistance >= 50)
{
var message = lang == "zh" ? $"在<color=#f93086>{item.RouteName}</color>中骑行里程达到<color=#e3d427>{"50KM"}</color>" : $"riding distance reaches <color=#e3d427>{"50KM"}</color> in <color=#f93086>{item.RouteName}</color>!";
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), $"{item.RouteId}{item.Name}50KM");
}
//距离100
if (item.EndDistance >= 100)
{
var message = lang == "zh" ? $"在<color=#f93086>{item.RouteName}</color>中骑行里程达到<color=#e3d427>{"100KM"}</color>" : $"riding distance reaches <color=#e3d427>{"100KM"}</color> in <color=#f93086>{item.RouteName}</color>!";
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), $"{item.RouteId}{item.Name}100KM");
}
////速度35
//if (item.Speed >= 35)
//{
// var message = lang == "zh" ? $"骑行速度突破<color=#e3d427>{Math.Round(item.Speed, 2)}KM/H</color>" : $"riding speed reaches <color=#e3d427>{Math.Round(item.Speed, 2)}KM/H</color>!";
// EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), $"{item.RouteId}{item.Name}35KM/H");
//}
//速度50
if (item.Speed >= 50)
{
var message = lang == "zh" ? $"在<color=#f93086>{item.RouteName}</color>中骑行速度达到<color=#e3d427>{Math.Round(item.Speed,2)}KM/H</color>" : $"riding speed reaches <color=#e3d427>{Math.Round(item.Speed, 2)}KM/H</color> in <color=#f93086>{item.RouteName}</color>!";
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), $"{item.RouteId}{item.Name}50KM/H");
}
//功体比
if (item.WeightKg >= 4)
{
var message = lang == "zh" ? $"在<color=#f93086>{item.RouteName}</color>中功体比达到<color=#e3d427>{Math.Round(item.WeightKg, 2)}w/kg</color>" : $" riding PWR reaches <color=#e3d427>{Math.Round(item.WeightKg, 2)}w/kg</color> in <color=#f93086>{item.RouteName}</color>!";
EventQueueSystem.QueueEventOnce(new LinkedMessageEvent(item.RouteId, message, item.HeadImage, item.Name, item.RouteName), $"{item.RouteId}{item.Name}3WeightKg");
}
}
}
}
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?"), () => {
App.RouteIdParam = App.tempRecordData.RouteId;
App.CompetionId = App.tempRecordData.CompetitionId;
SceneManager.LoadScene("Ride");
},2,()=> {
Helper.DelectDir(PFConstants.MapWorkoutRecordTempFolder);
App.tempRecordData = null;
});
}
}
}
private void OnDestroy()
{
EventQueueSystem.RemoveListener<LinkedMessageEvent>(LinkedMessageHandler);
App.isHomeChanged -= OnIsHomeChanged;
}
}