190 lines
5.2 KiB
C#
190 lines
5.2 KiB
C#
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<PFUIPanel>();
|
|
UIManager.Instance.ModalsPanel = this.transform.Find("SingleUI/ModalPanel").GetComponent<PFUIPanel>();
|
|
}
|
|
//加载人物和地图以及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<string>(),
|
|
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 数据处理
|
|
/// <summary>
|
|
/// 当前骑行数据的记录器
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 海拔图数据
|
|
/// </summary>
|
|
public float[] GetRealTimeLineChartData(int index)
|
|
{
|
|
List<float> dist = new List<float>();
|
|
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
|
|
|
|
|
|
}
|