powerfun-unity/Assets/Scripts/Scenes/MainController.cs

419 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()
{
msgIndex = 0;
foreach (var item in msgs)
{
item.DOFade(0, 0.3f);
}
}
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
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();//查询当前我参加的赛事
LastRide();//检查本地异常中断的骑行并弹窗提示继续
}
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);
//发送消息
foreach (var item in MapUDPService.GetOnlineUserList())
{
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.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()
{
App.isHomeChanged -= OnIsHomeChanged;
}
}