using Assets.Scripts.Apis; using Assets.Scripts.Apis.Models; using System; using System.Linq; using System.Collections; using System.Collections.Generic; using UnityEngine.Networking; using Assets.Scenes.Ride.Scripts.Model; using Assets.Scenes.Ride.Scripts.Model.CyclingModels; using Assets.Scenes.Ride.Scripts; using Mapbox.Unity.Map; using UnityEngine; using GeoJSON.Net.Geometry; using TurfCS; using Mapbox.Utils; using Assets.Scripts; public class CyclingController : DeviceServiceMonoBase { public AbstractMap map; public GameObject player; public GameObject UIObject; public RouteResultParam selectParamModel; public RouteResult routeResult; public int preticks; #region 参数 private MapDataModel mapData;//当前路书数据 private Vector2d coordiantes;//当前地图中心 public bool isStart;//当前游戏是否开始 public CyclingModel cyclingModel;//当前骑行模式 public BaseCycling cyclingController { get; set; } private int RouteId; private MapApi mapApi; private Route mapRoute; #endregion GameObject loadingcanvas; void Awake() { //获取路书信息 mapApi = ConfigHelper.mapApi; RouteId = App.RouteIdParam > 0? App.RouteIdParam : 376; MapDataModel result = mapApi.GetData(RouteId); mapRoute = GetNewInstace(RouteId);//获取一个路书所有的数据 MapUDPService.Init();//初始化TCP if (result != null ) { Init(result); } else { Debug.LogError("获取地图数据失败"); } } private void Start() { UIManager.Instance.MainPanel = this.transform.Find("SingleUI/Panel").GetComponent(); UIManager.Instance.ModalsPanel = this.transform.Find("SingleUI/ModalPanel").GetComponent(); } //加载人物和地图以及UI界面 private void Init(MapDataModel result) { if (App.routeResult != null ) { routeResult = App.routeResult; selectParamModel = App.routeResult.ContinueCyclingParam; preticks = App.routeResult.Ticks; } if (selectParamModel == null) { selectParamModel = new RouteResultParam { CompetitionId = 0, ContinueIndex = 0, ContinueMark = "", GlobalContinue = false, EndDistance = 0, RankingsId = new List(), OnlineUserId = 0, RouteId = App.RouteIdParam }; } App.routeResult = null; mapData = result; double endDistance = 0; endDistance = selectParamModel.EndDistance; coordiantes = Along(endDistance); map.gameObject.SetActive(true); player.SetActive(true); UIObject.SetActive(true); } public void SetCyclingModel(CyclingModel mode) { this.cyclingModel = mode; switch (cyclingModel) { case CyclingModel.Single: cyclingController = new SingleModel(mapRoute, selectParamModel); break; case CyclingModel.Review: cyclingController = new SingleModel(mapRoute, selectParamModel); break; } } #region 数据处理 /// /// 当前骑行数据的记录器 /// private RecorderDataModel recorderData { get { return cyclingController?.recorderData; } } public Route GetRoute() { return mapRoute; } public MapDataModel GetMapData() { return mapData; } public Vector2d GetCenterCoordinate() { return coordiantes; } public Route GetNewInstace(int id) { var routeInstance = mapApi.GetById(id); if (routeInstance == null) { return null; } var jsonData = mapApi.GetData(RouteId); return new Route(jsonData, routeInstance.data); } public Vector2d Along(double endDistance) { if (mapData != null) { var list = mapData.List.Select(p => new GeoJSON.Net.Geometry.GeographicPosition(p.Point[0], p.Point[1])); LineString lineString = new LineString(list); var pt1 = Turf.Along(lineString, endDistance); var ll = ((GeographicPosition)((GeoJSON.Net.Geometry.Point)pt1.Geometry).Coordinates); return new Vector2d(ll.Latitude, ll.Longitude); } else { return new Vector2d(0,0); } } /// /// 海拔图数据 /// public float[] GetRealTimeLineChartData(int index) { List dist = new List(); var list = mapData.List.Select(c => (float) c.Elevation ).ToArray(); var count = list.Count(); for (int i = 0; i < count; i++) { if (i > index) { dist.Add(list[i]); } } return dist.ToArray(); } public float[] GetLineChartData() { var list = mapData.List.Select(c => (float)c.Elevation).ToArray(); return list; } #endregion }