1431 lines
64 KiB
C#
1431 lines
64 KiB
C#
using Assets.Scenes.Ride.Scripts;
|
|
using Assets.Scenes.Ride.Scripts.Model;
|
|
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
|
|
using Assets.Scripts.Apis;
|
|
using Assets.Scripts.Apis.Models;
|
|
using Assets.Scripts.UI.Prefab.Device;
|
|
using GeoJSON.Net.Geometry;
|
|
using Mapbox.Utils;
|
|
using RenderHeads.Media.AVProVideo;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using TurfCS;
|
|
using UnityEngine;
|
|
using DG.Tweening;
|
|
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.Events;
|
|
using Helper = Assets.Scenes.Ride.Scripts.Helper;
|
|
using System.Collections;
|
|
using FluffyUnderware.Curvy.Examples;
|
|
using FluffyUnderware.Curvy.Controllers;
|
|
using FluffyUnderware.Curvy;
|
|
using System.Reflection;
|
|
|
|
namespace Assets.Scripts.Scenes.VideoRide
|
|
{
|
|
public class CustomRange
|
|
{
|
|
public int KeyFrame { get; set; }//帧数
|
|
public int Start { get; set; }//起始帧
|
|
public int End { get; set; }//结束帧
|
|
public float PositionX { get; set; }
|
|
public float PositionY { get; set; }
|
|
public float PositionZ { get; set; }
|
|
public float RotationY { get; set; }
|
|
public float RotationZ { get; set; }
|
|
public float LightY { get; set; }
|
|
|
|
|
|
|
|
|
|
private const float defaultRotationY = 0;
|
|
private const float defaultRotationZ = 0;
|
|
private const float defaultPositionX = 0;
|
|
private const float defaultPositionY = -1;
|
|
private const float defaultPositionZ = 3;
|
|
private const float defaultLightY = 0;
|
|
|
|
public static CustomRange Read(string s)
|
|
{
|
|
// - 代表默认值
|
|
//KeyFrame:RotationY,RotationZ,PositionX,PositionY,PositionZ,LightY
|
|
var result = s.Split(':');
|
|
var v = result[1].Split(',');
|
|
CustomRange r = new CustomRange()
|
|
{
|
|
KeyFrame = Convert.ToInt32(result[0]),
|
|
RotationY = v[0].Equals("-") ? defaultRotationY : (float)Convert.ToDouble(v[0]),
|
|
RotationZ = v[1].Equals("-") ? defaultRotationZ : (float)Convert.ToDouble(v[1]),
|
|
PositionX = v[2].Equals("-") ? defaultPositionX : (float)Convert.ToDouble(v[2]),
|
|
PositionY = v[3].Equals("-") ? defaultPositionY : (float)Convert.ToDouble(v[3]),
|
|
PositionZ = v[4].Equals("-") ? defaultPositionZ : (float)Convert.ToDouble(v[4]),
|
|
LightY = v[5].Equals("-") ? defaultLightY : (float)Convert.ToDouble(v[5]),
|
|
};
|
|
return r;
|
|
}
|
|
}
|
|
public class VideoGameManager : DeviceServiceMonoBase
|
|
{
|
|
public SplineController TestSpline;
|
|
public AbstractVideoPlayer CurrentPlayer { get; set; }
|
|
private MapDataModel mapData { get; set; }
|
|
private MediaPlayer mediaPlayer { get; set; }
|
|
private bool isStart { get; set; }
|
|
private Route route { get; set; }
|
|
public MapRoute mapRoute { get; set; }
|
|
public RouteResultParam selectParamModel;
|
|
public RouteResult routeResult;
|
|
public string recordId { get; set; }
|
|
public DateTime startTime { get; set; }
|
|
public int FrameKM { get; private set; }//一米对应的帧数
|
|
public CyclingModel cyclingModel;
|
|
public BaseCycling cyclingController { get; set; }
|
|
public List<CustomRange> mockDirection = new List<CustomRange>();
|
|
private double endDistance { get; set; }
|
|
public List<float> slots = new List<float>();
|
|
public SplineController cameraSplineCp;
|
|
public List<FrameNode> frameList = new List<FrameNode>();
|
|
public List<CameraNode> cameraList = new List<CameraNode>();
|
|
GameObject infoPanel;
|
|
GameObject OnlinePlayer;
|
|
GameObject OnlinePlayer_NV;
|
|
private bool isStop { get; set; }
|
|
public enum ARMode
|
|
{
|
|
RIDE,
|
|
INSPECT
|
|
}
|
|
|
|
public enum ViewMode
|
|
{
|
|
THIRD,
|
|
FIRST,
|
|
}
|
|
//当前是第一人称还是第三人称
|
|
public ViewMode _viewMode { get; set; }
|
|
//当前是观察者视角还是骑行者视角
|
|
public ARMode _aRMode { get; set; }
|
|
public int RankingId { get; set; }
|
|
private int currentOnlineCount = 0;
|
|
|
|
private void Awake()
|
|
{
|
|
base.Awake();
|
|
#if UNITY_EDITOR
|
|
if (App.RouteIdParam == 0)
|
|
App.RouteIdParam = 6250;
|
|
#endif
|
|
#if UNITY_EDITOR
|
|
if (App.CurrentUser == null) //App.CurrentUser == null
|
|
{
|
|
Login();
|
|
}
|
|
#endif
|
|
|
|
|
|
mediaPlayer = FindObjectOfType<MediaPlayer>();
|
|
DeviceCache.Init(PFConstants.DeviceCacheFolder);
|
|
var check = CheckAnt();//初始化蓝牙设备
|
|
recordId = Guid.NewGuid().ToString();
|
|
infoPanel = Resources.Load<GameObject>("UI/Prefab/AR/VideoPlayerHead");
|
|
OnlinePlayer = Resources.Load<GameObject>("UI/Prefab/AR/OnlineController");
|
|
OnlinePlayer_NV = Resources.Load<GameObject>("UI/Prefab/AR/OnlineControllerNV");
|
|
StartCoroutine(Init());
|
|
}
|
|
private async Task Login()
|
|
{
|
|
var result = await ConfigHelper.userApi.Login("13115011550", "laozhong", "");
|
|
App.CurrentUser = result.data;
|
|
}
|
|
void Start()
|
|
{
|
|
InitSlots();
|
|
|
|
UIManager.Instance.MainPanel = GetCanvasTransform().GetComponent<PFUIPanel>();
|
|
UIManager.Instance.ModalsPanel = this.transform.Find("Canvas/ModalPanel").GetComponent<PFUIPanel>();
|
|
var routeId = App.RouteIdParam;
|
|
|
|
frameList.Add(new FrameNode(0, 0f, 0f));
|
|
frameList.Add(new FrameNode(9, 12.3199f, 0f));
|
|
frameList.Add(new FrameNode(12,13.7112f, 0f));
|
|
frameList.Add(new FrameNode(16, 14.7739f, 0f));
|
|
frameList.Add(new FrameNode(20, 15.35841f, 0f));
|
|
frameList.Add(new FrameNode(27, 17.72667f, 0f));
|
|
//frameList.Add(new FrameNode(28, 18.84726f, 0f));//5
|
|
frameList.Add(new FrameNode(42, 27.90649f, 0f));//6
|
|
frameList.Add(new FrameNode(45,29.79181f, 0f));
|
|
frameList.Add(new FrameNode(48, 31.90696f, 0f));
|
|
frameList.Add(new FrameNode(54, 36.29254f, 0f));
|
|
frameList.Add(new FrameNode(57, 37.29254f, 0f));
|
|
frameList.Add(new FrameNode(60, 38.29254f, 0f));
|
|
frameList.Add(new FrameNode(65, 39.29254f, 0f));
|
|
frameList.Add(new FrameNode(68, 41.27815f, 0f));
|
|
frameList.Add(new FrameNode(73, 43.19016f, 0f));//16
|
|
frameList.Add(new FrameNode(78, 45.43f, 0f));
|
|
frameList.Add(new FrameNode(82, 48.23182f, 0f));
|
|
frameList.Add(new FrameNode(87, 50.86049f, -35f));
|
|
frameList.Add(new FrameNode(88, 50.98507f, -35f));
|
|
frameList.Add(new FrameNode(91, 52.81607f, 0f));
|
|
frameList.Add(new FrameNode(100, 61.5411f, 0f));
|
|
frameList.Add(new FrameNode(104, 63.37199f, 0f));
|
|
//frameList.Add(new FrameNode(108, 69.8255f, 0f));
|
|
frameList.Add(new FrameNode(113, 72.18642f, 0f));
|
|
//26
|
|
frameList.Add(new FrameNode(118, 74.10821f, 0f));
|
|
frameList.Add(new FrameNode(128, 87.30973f, 0f));
|
|
frameList.Add(new FrameNode(130, 88.09172f, 0f));
|
|
frameList.Add(new FrameNode(132, 88.89172f, 0f));
|
|
frameList.Add(new FrameNode(134, 90.21376f, 0f));
|
|
//frameList.Add(new FrameNode(135, 90.8998f, -50f));
|
|
frameList.Add(new FrameNode(137, 90.91622f, -30f));
|
|
|
|
frameList.Add(new FrameNode(138, 92.1507f, 0f));
|
|
//frameList.Add(new FrameNode(151, 132.0324f, 0f));
|
|
frameList.Add(new FrameNode(240, 200.8329f, 0f));
|
|
frameList.Add(new FrameNode(243, 201.6151f, 0f));
|
|
//frameList.Add(new FrameNode(246, 209.2839f, 0f));
|
|
//52
|
|
frameList.Add(new FrameNode(309, 270.4622f, 0f));
|
|
frameList.Add(new FrameNode(315, 278.1699f, 0f));
|
|
frameList.Add(new FrameNode(346, 318.9359f, 0f));
|
|
frameList.Add(new FrameNode(349, 319.5933f, 0f));
|
|
frameList.Add(new FrameNode(351, 320.455f, 0f));
|
|
frameList.Add(new FrameNode(353, 321.5069f, 0f));
|
|
frameList.Add(new FrameNode(355, 322.3673f, 0f));
|
|
frameList.Add(new FrameNode(357, 324.1232f, 0f));
|
|
frameList.Add(new FrameNode(361, 327.2288f, 0f));
|
|
frameList.Add(new FrameNode(363, 330.5477f, 0f));
|
|
frameList.Add(new FrameNode(366, 335.2359f, 0f));
|
|
frameList.Add(new FrameNode(369, 340.1845f, 0f));
|
|
frameList.Add(new FrameNode(382, 353.3118f, 0f));
|
|
//77-80
|
|
frameList.Add(new FrameNode(388, 357.9286f, 0f));
|
|
frameList.Add(new FrameNode(390, 364.9177f, 0f));
|
|
frameList.Add(new FrameNode(394, 373.9865f, 0f));
|
|
frameList.Add(new FrameNode(397, 384.4636f, 0f));
|
|
|
|
frameList.Add(new FrameNode(431, 408.4913f, 0f));
|
|
frameList.Add(new FrameNode(444, 422.9968f, 0f));
|
|
frameList.Add(new FrameNode(468, 457.0891f, 0f));
|
|
frameList.Add(new FrameNode(470, 459.0445f, 0f));
|
|
//
|
|
frameList.Add(new FrameNode(482, 470.9391f, 0f));
|
|
frameList.Add(new FrameNode(488, 478.6555f, 0f));
|
|
frameList.Add(new FrameNode(490, 486.0622f, 0f));
|
|
frameList.Add(new FrameNode(492, 488.303f, 0f));
|
|
frameList.Add(new FrameNode(494, 491.6067f, 0f));
|
|
frameList.Add(new FrameNode(500, 496.1852f, 0f));
|
|
|
|
frameList.Add(new FrameNode(503, 497.4996f, 0f));
|
|
frameList.Add(new FrameNode(507, 500f, 0f));
|
|
frameList.Add(new FrameNode(517, 513.4762f, 0f));
|
|
//149
|
|
frameList.Add(new FrameNode(536, 534.9143f, 0f));
|
|
frameList.Add(new FrameNode(545, 538.7531f, 0f));
|
|
frameList.Add(new FrameNode(558, 556.618f, 0f));
|
|
frameList.Add(new FrameNode(564, 559.7636f, 0f));
|
|
frameList.Add(new FrameNode(565, 561.8145f, 0f));
|
|
|
|
frameList.Add(new FrameNode(582, 581.5415f, 0f));
|
|
frameList.Add(new FrameNode(584, 582.0046f, 0f));
|
|
frameList.Add(new FrameNode(585, 582.2766f, 0f));
|
|
frameList.Add(new FrameNode(587, 582.8945f, 0f));
|
|
|
|
frameList.Add(new FrameNode(589, 583.4751f, 0f));
|
|
frameList.Add(new FrameNode(595, 591.9789f, 0f));
|
|
//162
|
|
frameList.Add(new FrameNode(601, 598.1606f, 0f));
|
|
frameList.Add(new FrameNode(604, 601.8961f, 0f));
|
|
frameList.Add(new FrameNode(605, 602.8546f, 0f));
|
|
frameList.Add(new FrameNode(608, 607.5944f, 0f));
|
|
frameList.Add(new FrameNode(610, 609.5393f, 0f));
|
|
|
|
frameList.Add(new FrameNode(623, 623.3278f, 0f));
|
|
|
|
//frameList.Add(new FrameNode(626, 651.1359f, 0f));
|
|
//frameList.Add(new FrameNode(654, 679.8105f, 0f));
|
|
|
|
frameList.Add(new FrameNode(657, 656.5771f, 0f));
|
|
frameList.Add(new FrameNode(659, 659.3555f, 0f));
|
|
|
|
frameList.Add(new FrameNode(664, 665.2852f, 1905f));
|
|
frameList.Add(new FrameNode(678,671.5179f, 0f));
|
|
//729
|
|
frameList.Add(new FrameNode(729, 738.3674f, 0f));
|
|
frameList.Add(new FrameNode(765, 789.5222f, 0f));
|
|
|
|
frameList.Add(new FrameNode(817, 848.2686f, 0f));
|
|
|
|
frameList.Add(new FrameNode(822, 863.353f, 0f));
|
|
frameList.Add(new FrameNode(826, 870.6135f, 0f));
|
|
|
|
//frameList.Add(new FrameNode(850, 909.6302f, 0f));
|
|
frameList.Add(new FrameNode(914, 922.5651f, 0f));
|
|
|
|
frameList.Add(new FrameNode(924,942.5651f, 0f));//虚拟终点
|
|
|
|
CreateCameraRotationList();
|
|
//获取路书
|
|
GetMapRoute();
|
|
GetMapData();
|
|
MockDirection();
|
|
route = new Route(mapData, mapRoute);
|
|
|
|
if (selectParamModel == null)
|
|
{
|
|
selectParamModel = new RouteResultParam
|
|
{
|
|
CompetitionId = 0,
|
|
ContinueIndex = 0,
|
|
ContinueMark = "",
|
|
GlobalContinue = false,
|
|
EndDistance = 0,
|
|
RankingsId = new List<string>(),
|
|
OnlineUserId = 0,
|
|
RouteId = routeId
|
|
};
|
|
}
|
|
endDistance = 0;
|
|
videoLoading = FindObjectOfType<VideoLoading>();
|
|
|
|
}
|
|
/// <summary>
|
|
/// 控制
|
|
/// </summary>
|
|
private void CreateCameraRotationList()
|
|
{
|
|
cameraList.Add(new CameraNode(0, 1, 0));
|
|
cameraList.Add(new CameraNode(160, 2, 0));
|
|
cameraList.Add(new CameraNode(197, 2, -2));
|
|
cameraList.Add(new CameraNode(280, 3, -5));
|
|
cameraList.Add(new CameraNode(313, 3, -5));
|
|
cameraList.Add(new CameraNode(353, 3, -2));
|
|
cameraList.Add(new CameraNode(406, 1, 0));
|
|
cameraList.Add(new CameraNode(436, 1, 0));
|
|
cameraList.Add(new CameraNode(484, 1, 0));
|
|
cameraList.Add(new CameraNode(516, 0, 0));
|
|
cameraList.Add(new CameraNode(524, 0, 5));
|
|
cameraList.Add(new CameraNode(538, 0, 5));
|
|
cameraList.Add(new CameraNode(576, 1, 5));
|
|
cameraList.Add(new CameraNode(624, 1, 12));
|
|
cameraList.Add(new CameraNode(632, 1, 12));
|
|
cameraList.Add(new CameraNode(643, 1, 10));
|
|
cameraList.Add(new CameraNode(651, 2, 10));
|
|
cameraList.Add(new CameraNode(672, 2, 8));
|
|
cameraList.Add(new CameraNode(697, 2, 3));
|
|
cameraList.Add(new CameraNode(703, 2, 2));
|
|
cameraList.Add(new CameraNode(710, 2, 0));
|
|
|
|
cameraList.Add(new CameraNode(1000, 2, 0));
|
|
cameraList.Add(new CameraNode(1051,0,5));
|
|
cameraList.Add(new CameraNode(1107, 0, 10));
|
|
cameraList.Add(new CameraNode(1142, 0, 20));
|
|
cameraList.Add(new CameraNode(1168, 0, 20));
|
|
cameraList.Add(new CameraNode(1184, 0, 20));//
|
|
cameraList.Add(new CameraNode(1191, 0, 15));//
|
|
cameraList.Add(new CameraNode(1200, 0, 12));//
|
|
cameraList.Add(new CameraNode(1224, 0, 5));//
|
|
cameraList.Add(new CameraNode(1232, 0, 0));
|
|
cameraList.Add(new CameraNode(1270, 1.5f, -4));
|
|
cameraList.Add(new CameraNode(1317, 1, -8));
|
|
cameraList.Add(new CameraNode(1348, 0, -8));
|
|
cameraList.Add(new CameraNode(1390, 0, -5));
|
|
cameraList.Add(new CameraNode(1419, 0, 10));
|
|
cameraList.Add(new CameraNode(1430, 1, 10));
|
|
cameraList.Add(new CameraNode(1473, 1, 10));
|
|
cameraList.Add(new CameraNode(1504, 1, 15));
|
|
cameraList.Add(new CameraNode(1533, 2, 5));
|
|
cameraList.Add(new CameraNode(1551, 2, 5));
|
|
cameraList.Add(new CameraNode(1588, 2, 0));
|
|
cameraList.Add(new CameraNode(1644, 2, 0));
|
|
cameraList.Add(new CameraNode(1657, 2, -5));
|
|
cameraList.Add(new CameraNode(1661, 2, -5));
|
|
cameraList.Add(new CameraNode(1681, 2, -5));
|
|
cameraList.Add(new CameraNode(1723, 2, -10));
|
|
cameraList.Add(new CameraNode(1785, 1, -5));
|
|
cameraList.Add(new CameraNode(1792,2, 0));
|
|
cameraList.Add(new CameraNode(1807, 1, 2));
|
|
cameraList.Add(new CameraNode(1827, 1, 8));
|
|
cameraList.Add(new CameraNode(1837, 1, 9));
|
|
cameraList.Add(new CameraNode(1850, 1, 10));
|
|
cameraList.Add(new CameraNode(1906, 1, 10));
|
|
cameraList.Add(new CameraNode(1937, 1, 0));
|
|
cameraList.Add(new CameraNode(2119, 1, -10));
|
|
cameraList.Add(new CameraNode(2138, 1, -20));
|
|
cameraList.Add(new CameraNode(2192, 1, -20));
|
|
cameraList.Add(new CameraNode(2241, 0, -20));
|
|
cameraList.Add(new CameraNode(2250, 0, -20));
|
|
cameraList.Add(new CameraNode(2259, 0, -20));
|
|
cameraList.Add(new CameraNode(2279, 1, -12));
|
|
cameraList.Add(new CameraNode(2288, 1, -5));
|
|
cameraList.Add(new CameraNode(2299, 1, 0));
|
|
cameraList.Add(new CameraNode(2323, 2, 0));
|
|
cameraList.Add(new CameraNode(2342, 2, 0));
|
|
cameraList.Add(new CameraNode(2457, 2, 2));
|
|
cameraList.Add(new CameraNode(2484, 2, 5));
|
|
cameraList.Add(new CameraNode(2536, 3, 5));
|
|
cameraList.Add(new CameraNode(2600, 4, 0));
|
|
cameraList.Add(new CameraNode(2611, 2, 2));
|
|
cameraList.Add(new CameraNode(2620, 2, -2));
|
|
cameraList.Add(new CameraNode(2623, 2, 0));
|
|
cameraList.Add(new CameraNode(2639, 1, 2));
|
|
cameraList.Add(new CameraNode(2659, 1, 5));
|
|
cameraList.Add(new CameraNode(2663, 1, 5));
|
|
cameraList.Add(new CameraNode(2758, 2f,5));
|
|
cameraList.Add(new CameraNode(2762, 2f, 5));
|
|
cameraList.Add(new CameraNode(2814, 3f, -3));
|
|
cameraList.Add(new CameraNode(2839, 3f, -6));
|
|
cameraList.Add(new CameraNode(2857, 3f, -12));
|
|
cameraList.Add(new CameraNode(2893, 3f, -12));
|
|
cameraList.Add(new CameraNode(2915, 3f, -8));
|
|
cameraList.Add(new CameraNode(2948, 3f, -5));
|
|
cameraList.Add(new CameraNode(2955, 1f, 0));
|
|
cameraList.Add(new CameraNode(2967, 2f, 0));
|
|
cameraList.Add(new CameraNode(2984, 2f,0));
|
|
cameraList.Add(new CameraNode(3008, 0f,0));
|
|
|
|
cameraList.Add(new CameraNode(3032, 1f, 2));
|
|
cameraList.Add(new CameraNode(3063, 1f, 8));
|
|
cameraList.Add(new CameraNode(3076, 1f,8));
|
|
cameraList.Add(new CameraNode(3111, 1f, 6));
|
|
cameraList.Add(new CameraNode(3160, 1f, 2));
|
|
cameraList.Add(new CameraNode(3186, 2f, 0));
|
|
cameraList.Add(new CameraNode(3405, 0f, -40));
|
|
cameraList.Add(new CameraNode(3433, 0f, -50));
|
|
cameraList.Add(new CameraNode(3442, 0f, -35));
|
|
cameraList.Add(new CameraNode(3456, 0f, -5));
|
|
cameraList.Add(new CameraNode(3460, 2f, 0));
|
|
cameraList.Add(new CameraNode(3893, 2f, -2));
|
|
cameraList.Add(new CameraNode(3968, 2f, 0));
|
|
cameraList.Add(new CameraNode(4072, 2f, -2));
|
|
cameraList.Add(new CameraNode(4118, 2f, -1));
|
|
cameraList.Add(new CameraNode(4150, 2f,-1));
|
|
cameraList.Add(new CameraNode(4258, 2f, -2));
|
|
|
|
cameraList.Add(new CameraNode(4441, 2f, -2));
|
|
cameraList.Add(new CameraNode(4528, 2f, -2));
|
|
cameraList.Add(new CameraNode(4552, 2f, -2));
|
|
cameraList.Add(new CameraNode(4695, 2f, -1));
|
|
cameraList.Add(new CameraNode(4872, 2f, -2));
|
|
cameraList.Add(new CameraNode(5148, 2f, -2));
|
|
cameraList.Add(new CameraNode(5257, 2f, -2));
|
|
cameraList.Add(new CameraNode(5597, 2f, -2));
|
|
cameraList.Add(new CameraNode(5602, 2f, 0));
|
|
cameraList.Add(new CameraNode(5622, 2f, 1));
|
|
cameraList.Add(new CameraNode(5651, 2f, -2));
|
|
cameraList.Add(new CameraNode(5668, 2f, -4));
|
|
cameraList.Add(new CameraNode(5706, 2f, 0));
|
|
cameraList.Add(new CameraNode(5812, 2f, 0));
|
|
cameraList.Add(new CameraNode(5875, 1f, 0));
|
|
cameraList.Add(new CameraNode(5911, 3f, 0));
|
|
cameraList.Add(new CameraNode(5954, 3f, 0));
|
|
cameraList.Add(new CameraNode(5973, 4f, 0));
|
|
cameraList.Add(new CameraNode(5995, 4.5f, 0));
|
|
|
|
|
|
cameraList.Add(new CameraNode(6000, 4f, -2));
|
|
cameraList.Add(new CameraNode(6043, 2f, -25));
|
|
cameraList.Add(new CameraNode(6073, 2f, -20));
|
|
cameraList.Add(new CameraNode(6087, 2f, -20));
|
|
cameraList.Add(new CameraNode(6111, 2f, -15));
|
|
cameraList.Add(new CameraNode(6124, 2f, -10));
|
|
cameraList.Add(new CameraNode(6135, 2f, -10));
|
|
cameraList.Add(new CameraNode(6145, 2f, -5));
|
|
cameraList.Add(new CameraNode(6160, 2f, -5));
|
|
cameraList.Add(new CameraNode(6168, 2f, -10));
|
|
cameraList.Add(new CameraNode(6164, 2f, -8));
|
|
cameraList.Add(new CameraNode(6197, 2f, -10));
|
|
cameraList.Add(new CameraNode(6219, 2f, -8));
|
|
cameraList.Add(new CameraNode(6234, 2f, -6));
|
|
cameraList.Add(new CameraNode(6251, 2f, -1));
|
|
cameraList.Add(new CameraNode(6271, 2f, -1));
|
|
cameraList.Add(new CameraNode(6304, 2f, -1));
|
|
|
|
|
|
cameraList.Add(new CameraNode(6315, 2f, -1));
|
|
cameraList.Add(new CameraNode(6420, 2f, -2));
|
|
|
|
cameraList.Add(new CameraNode(6665, 2f, -2));
|
|
cameraList.Add(new CameraNode(6783, 2f, 0));
|
|
cameraList.Add(new CameraNode(6860, 0f, -1));
|
|
cameraList.Add(new CameraNode(6983, 1f,-2));
|
|
cameraList.Add(new CameraNode(7352, 2f, -2));
|
|
|
|
cameraList.Add(new CameraNode(7477, 2f, -2));
|
|
cameraList.Add(new CameraNode(7533, 2f, 0));
|
|
|
|
cameraList.Add(new CameraNode(7554, 2f, 0));
|
|
cameraList.Add(new CameraNode(7669, 2f, -5));
|
|
|
|
cameraList.Add(new CameraNode(7704, 2f, -10));
|
|
cameraList.Add(new CameraNode(7717, 2f, -8));
|
|
cameraList.Add(new CameraNode(7742, 2f, -10));
|
|
cameraList.Add(new CameraNode(7764, 1f, -8));
|
|
cameraList.Add(new CameraNode(7813, 1f, 8));
|
|
cameraList.Add(new CameraNode(7822, 2f, 12));
|
|
cameraList.Add(new CameraNode(7833, 2f, 8));
|
|
cameraList.Add(new CameraNode(7847, 2f, 5));
|
|
cameraList.Add(new CameraNode(7863, 2f, 4));
|
|
cameraList.Add(new CameraNode(7877, 2f, 2));
|
|
cameraList.Add(new CameraNode(7886, 2f,2));
|
|
cameraList.Add(new CameraNode(7905, 2f,2));
|
|
cameraList.Add(new CameraNode(7928, 2f, 2));
|
|
cameraList.Add(new CameraNode(7958, 2f, 0));
|
|
cameraList.Add(new CameraNode(7962, 2f,-2));
|
|
cameraList.Add(new CameraNode(8106, 2f, -2));
|
|
cameraList.Add(new CameraNode(8358, 2f, -1));
|
|
cameraList.Add(new CameraNode(8500, 2f, 0));
|
|
cameraList.Add(new CameraNode(8518, 2f, -4));
|
|
//==== ====
|
|
cameraList.Add(new CameraNode(8604, 2f, -5));
|
|
cameraList.Add(new CameraNode(8706, 2f, 0));
|
|
cameraList.Add(new CameraNode(8769, 2f, 0));
|
|
cameraList.Add(new CameraNode(8795, 2f, 5));
|
|
cameraList.Add(new CameraNode(8817, 3f, 5));
|
|
cameraList.Add(new CameraNode(8835, 2f, 6));
|
|
cameraList.Add(new CameraNode(8853, 2f, 6));
|
|
cameraList.Add(new CameraNode(8870, 2f, 0));
|
|
|
|
cameraList.Add(new CameraNode(8887, 2f, -10));
|
|
cameraList.Add(new CameraNode(8889, 2f, -15));
|
|
cameraList.Add(new CameraNode(8906, 2f, -20));
|
|
cameraList.Add(new CameraNode(8921, 2f, -20));
|
|
cameraList.Add(new CameraNode(8940, 1f, 0));
|
|
|
|
cameraList.Add(new CameraNode(8967, 2f, 5));
|
|
cameraList.Add(new CameraNode(8995, 2f, 10));
|
|
|
|
cameraList.Add(new CameraNode(9003, 2f, 0));
|
|
cameraList.Add(new CameraNode(9042, 2f, 5));
|
|
cameraList.Add(new CameraNode(9082, 2f, 10));
|
|
cameraList.Add(new CameraNode(9128, 2f, 10));
|
|
cameraList.Add(new CameraNode(9149, 2f, 10));
|
|
cameraList.Add(new CameraNode(9184, 2f, 0));
|
|
cameraList.Add(new CameraNode(9225, 2f, -4));
|
|
cameraList.Add(new CameraNode(9251, 2f, 0));
|
|
cameraList.Add(new CameraNode(9267, 2f, -10));
|
|
cameraList.Add(new CameraNode(9302, 2f, -10));
|
|
cameraList.Add(new CameraNode(9325, 2f, -10));
|
|
cameraList.Add(new CameraNode(9347, 2f, -15));
|
|
cameraList.Add(new CameraNode(9368, 2f, -5));
|
|
cameraList.Add(new CameraNode(9374, 2f, -5));
|
|
cameraList.Add(new CameraNode(9408, 2f, 0));
|
|
cameraList.Add(new CameraNode(9447, 2f, 0));
|
|
cameraList.Add(new CameraNode(9483, 2f, -4));
|
|
cameraList.Add(new CameraNode(9512, 2f, 0));
|
|
cameraList.Add(new CameraNode(9556, -1f,6));
|
|
cameraList.Add(new CameraNode(9590, 1f, 12));
|
|
cameraList.Add(new CameraNode(9614, 1f, 15));
|
|
cameraList.Add(new CameraNode(9654, 1f, 0));
|
|
|
|
cameraList.Add(new CameraNode(9670, 2f, -2));
|
|
cameraList.Add(new CameraNode(9701, 1f, -8));
|
|
cameraList.Add(new CameraNode(9724, 2f, -5));
|
|
cameraList.Add(new CameraNode(9739, 2f, -10));
|
|
cameraList.Add(new CameraNode(9781, 3f, -14));
|
|
cameraList.Add(new CameraNode(9789, 3f, -14));
|
|
cameraList.Add(new CameraNode(9757, 3f, -8));
|
|
cameraList.Add(new CameraNode(9820, 3f, -12));
|
|
cameraList.Add(new CameraNode(9866, 3f, -6));
|
|
cameraList.Add(new CameraNode(9879, 3f, -5));
|
|
cameraList.Add(new CameraNode(9891, 3f, -5));
|
|
cameraList.Add(new CameraNode(9935, 3f, -4));
|
|
|
|
cameraList.Add(new CameraNode(10063, 2f, 0));
|
|
cameraList.Add(new CameraNode(10429, 1f, 0));
|
|
cameraList.Add(new CameraNode(10478, 1f, 0));
|
|
cameraList.Add(new CameraNode(10522, 1f, -2));
|
|
cameraList.Add(new CameraNode(10711, 2f, 0));
|
|
cameraList.Add(new CameraNode(10801, 2f, 0));
|
|
|
|
|
|
cameraList.Add(new CameraNode(10811, 2f, 0));
|
|
cameraList.Add(new CameraNode(10915, 2f, -2));
|
|
cameraList.Add(new CameraNode(10988, 2f, -4));
|
|
cameraList.Add(new CameraNode(11180, 3f, -5));
|
|
cameraList.Add(new CameraNode(11203, 3f, -10));
|
|
cameraList.Add(new CameraNode(11231, 3f, -8));
|
|
cameraList.Add(new CameraNode(11317, 3f, -8));
|
|
cameraList.Add(new CameraNode(11357, 2f, -10));
|
|
cameraList.Add(new CameraNode(11386, 2f, -3));
|
|
cameraList.Add(new CameraNode(11399, 2f,0));
|
|
cameraList.Add(new CameraNode(11491, 2f, 0));
|
|
cameraList.Add(new CameraNode(11495, 3f, -4));
|
|
|
|
cameraList.Add(new CameraNode(11512, 3f, -5));
|
|
cameraList.Add(new CameraNode(11537, 3f, -5));
|
|
cameraList.Add(new CameraNode(11580, 2f, -6));
|
|
cameraList.Add(new CameraNode(11590, 2f, 0));
|
|
cameraList.Add(new CameraNode(11600, 2f, -5));
|
|
cameraList.Add(new CameraNode(11692, 2f, -2));
|
|
cameraList.Add(new CameraNode(11746, 0f, 5));
|
|
cameraList.Add(new CameraNode(11765, 0f, 5));
|
|
cameraList.Add(new CameraNode(11855, 0f, 0));
|
|
cameraList.Add(new CameraNode(11897, 0f, 5));
|
|
cameraList.Add(new CameraNode(11923, 0f, 15));
|
|
cameraList.Add(new CameraNode(11967, 1f, 10));
|
|
cameraList.Add(new CameraNode(12032, 1f, 0));
|
|
cameraList.Add(new CameraNode(12052, 2f, -2));
|
|
cameraList.Add(new CameraNode(12084, 2f, -4));
|
|
|
|
cameraList.Add(new CameraNode(12130, 2f, -5));
|
|
cameraList.Add(new CameraNode(12151, 2f, -5));
|
|
cameraList.Add(new CameraNode(12176, 2f, 0));
|
|
cameraList.Add(new CameraNode(12198, 4f, -5));
|
|
cameraList.Add(new CameraNode(12241, 4f, -25));
|
|
cameraList.Add(new CameraNode(12250, 4f, -20));
|
|
cameraList.Add(new CameraNode(12286, 4f, -15));
|
|
cameraList.Add(new CameraNode(12320, 5f, 2));
|
|
cameraList.Add(new CameraNode(12333, 5f, 8));
|
|
cameraList.Add(new CameraNode(12351, 5f, 12));
|
|
cameraList.Add(new CameraNode(12388, 7f, 0));
|
|
cameraList.Add(new CameraNode(12380, 5f, 5));
|
|
cameraList.Add(new CameraNode(12422, 3f, -5));
|
|
cameraList.Add(new CameraNode(12455, 3f, -10));
|
|
|
|
|
|
|
|
//TODO
|
|
cameraList.Add(new CameraNode(12459, 2f, 0));
|
|
cameraList.Add(new CameraNode(12497, 2f, -5));
|
|
cameraList.Add(new CameraNode(12645, 2f, 5));
|
|
cameraList.Add(new CameraNode(12727, 4f, -2));
|
|
cameraList.Add(new CameraNode(12812, 4f, -2));
|
|
cameraList.Add(new CameraNode(12838, 4f, -6));
|
|
cameraList.Add(new CameraNode(12892, 2f, -3));
|
|
cameraList.Add(new CameraNode(13004, 4f, -5));
|
|
cameraList.Add(new CameraNode(13093, 4f, -10));
|
|
cameraList.Add(new CameraNode(13157, 3f, 0));
|
|
cameraList.Add(new CameraNode(13205, 3f, -10));
|
|
cameraList.Add(new CameraNode(13248, 2.5f, -12));
|
|
cameraList.Add(new CameraNode(13300, 3f, -5));
|
|
cameraList.Add(new CameraNode(13311, 2f, -10));
|
|
|
|
cameraList.Add(new CameraNode(13345, 2f, 0));
|
|
cameraList.Add(new CameraNode(13375, 1f, 0));
|
|
|
|
cameraList.Add(new CameraNode(13493, 1f, -20));
|
|
cameraList.Add(new CameraNode(13556, 1f, -40));
|
|
cameraList.Add(new CameraNode(13593, 1f, -20));
|
|
cameraList.Add(new CameraNode(13623, 2f, -10));
|
|
cameraList.Add(new CameraNode(13631, 2f, -5));
|
|
cameraList.Add(new CameraNode(13660, 2f, 0));
|
|
cameraList.Add(new CameraNode(13694, 2f, 5));
|
|
|
|
cameraList.Add(new CameraNode(13974, 2f, 0));
|
|
cameraList.Add(new CameraNode(14081, 3f, -25));
|
|
cameraList.Add(new CameraNode(14113, 3f, -20));
|
|
cameraList.Add(new CameraNode(14133, 3f, -15));
|
|
cameraList.Add(new CameraNode(14178, 3f, -15));
|
|
cameraList.Add(new CameraNode(14207, 3f, -10));
|
|
cameraList.Add(new CameraNode(14245, 3f, -5));
|
|
cameraList.Add(new CameraNode(14299, 3f, -3));
|
|
cameraList.Add(new CameraNode(14375, 2f, -3));
|
|
cameraList.Add(new CameraNode(14479, 2f, -3));
|
|
cameraList.Add(new CameraNode(14571, 2f, 0));
|
|
cameraList.Add(new CameraNode(14711, 2f, 0));
|
|
cameraList.Add(new CameraNode(14844, 3f, -14));
|
|
cameraList.Add(new CameraNode(14898, 3f, -18));
|
|
cameraList.Add(new CameraNode(14928, 3f, -12));
|
|
cameraList.Add(new CameraNode(14942, 2f, -6));
|
|
cameraList.Add(new CameraNode(14957, 2f, 0));
|
|
cameraList.Add(new CameraNode(15050, 2f, 4));
|
|
cameraList.Add(new CameraNode(15088, 2f, 8));
|
|
cameraList.Add(new CameraNode(15130, 2f, 0));
|
|
cameraList.Add(new CameraNode(15229, 2f, -4));
|
|
cameraList.Add(new CameraNode(15300, 2f, 0));
|
|
cameraList.Add(new CameraNode(15349, 2f, -5));
|
|
cameraList.Add(new CameraNode(15375, 2f, 0));
|
|
cameraList.Add(new CameraNode(15484, 2f,0));
|
|
cameraList.Add(new CameraNode(15535, 2f, -5));
|
|
cameraList.Add(new CameraNode(15553, 2f, 4));
|
|
cameraList.Add(new CameraNode(15566, 2f, 5));
|
|
|
|
cameraList.Add(new CameraNode(15580, 2f, 12));
|
|
cameraList.Add(new CameraNode(15603, 2f, 13));//0 -14 0
|
|
cameraList.Add(new CameraNode(15625, 2f, 5));
|
|
cameraList.Add(new CameraNode(15660, 2f, -15));
|
|
cameraList.Add(new CameraNode(15681, 2f, -12));
|
|
cameraList.Add(new CameraNode(15726, 2f, -4));
|
|
cameraList.Add(new CameraNode(15749, 2f, 0));
|
|
cameraList.Add(new CameraNode(15872, 2f, 2));
|
|
cameraList.Add(new CameraNode(15967, 2f, -2));
|
|
cameraList.Add(new CameraNode(16078, 2f, -2));
|
|
cameraList.Add(new CameraNode(16184, 2f, -2));
|
|
cameraList.Add(new CameraNode(16284, 1f, 0));
|
|
cameraList.Add(new CameraNode(16284, 1f, 0));
|
|
cameraList.Add(new CameraNode(16452, 1f, 12));
|
|
cameraList.Add(new CameraNode(16472, 1f, 6));
|
|
cameraList.Add(new CameraNode(16496, 1f, 2));
|
|
cameraList.Add(new CameraNode(16755, 1f, 5));
|
|
cameraList.Add(new CameraNode(16805, 1f, 2));
|
|
|
|
cameraList.Add(new CameraNode(16926, 2f, 0));
|
|
cameraList.Add(new CameraNode(17201, 2f, -2));
|
|
cameraList.Add(new CameraNode(17482, 2f, -2));
|
|
cameraList.Add(new CameraNode(17691, 2f, 2));
|
|
cameraList.Add(new CameraNode(17796, 2f, 0));
|
|
cameraList.Add(new CameraNode(17879, 2f, -1));
|
|
cameraList.Add(new CameraNode(17902, 2f, -2));
|
|
|
|
cameraList.Add(new CameraNode(18069, 2f, -5));
|
|
cameraList.Add(new CameraNode(18290, 2f, -8));
|
|
cameraList.Add(new CameraNode(18351, 2f, -4));
|
|
cameraList.Add(new CameraNode(18389, 2f, -2));
|
|
cameraList.Add(new CameraNode(18442, 2f, 0));
|
|
cameraList.Add(new CameraNode(18469, 2f, 3));
|
|
cameraList.Add(new CameraNode(18503, 2f, 3));
|
|
cameraList.Add(new CameraNode(18543, 2f, 0));
|
|
cameraList.Add(new CameraNode(18690, 2f, 0));
|
|
cameraList.Add(new CameraNode(18839, 2f, 2));
|
|
cameraList.Add(new CameraNode(18966, 2f, 0));
|
|
cameraList.Add(new CameraNode(19086, 3f, -5));
|
|
cameraList.Add(new CameraNode(19101, 3f, -6));
|
|
cameraList.Add(new CameraNode(19145, 3f, -7));
|
|
cameraList.Add(new CameraNode(19152, 3f, -4));
|
|
cameraList.Add(new CameraNode(19195, 2f, 0));
|
|
cameraList.Add(new CameraNode(19376, 1f, -6));
|
|
cameraList.Add(new CameraNode(19435, 1f, -4));
|
|
cameraList.Add(new CameraNode(19448, 1f, -2));
|
|
cameraList.Add(new CameraNode(19486, 2f, -2));
|
|
cameraList.Add(new CameraNode(19501, 2f, 0));
|
|
cameraList.Add(new CameraNode(19898, 2f, 0));
|
|
cameraList.Add(new CameraNode(19951, 2f, 0));
|
|
cameraList.Add(new CameraNode(20007, 2f, -2));
|
|
cameraList.Add(new CameraNode(20028, 2f, -4));
|
|
|
|
cameraList.Add(new CameraNode(20057, 2f, -6));
|
|
cameraList.Add(new CameraNode(20105, 1f, -6));
|
|
cameraList.Add(new CameraNode(20147, 2f, -3));
|
|
cameraList.Add(new CameraNode(20161, 2f, -3));
|
|
cameraList.Add(new CameraNode(20203, 2f, 1));
|
|
cameraList.Add(new CameraNode(20253, 2f, 0));
|
|
cameraList.Add(new CameraNode(20287, 2f, 2));
|
|
cameraList.Add(new CameraNode(20418, 2f, 2));
|
|
cameraList.Add(new CameraNode(20441, 2f, 2));
|
|
cameraList.Add(new CameraNode(20565, 2f, 2));
|
|
cameraList.Add(new CameraNode(20552, 2f, 2));
|
|
cameraList.Add(new CameraNode(20620, 2f, 8));
|
|
cameraList.Add(new CameraNode(20652, 2f, 4));
|
|
cameraList.Add(new CameraNode(20769, 2f, 0));
|
|
cameraList.Add(new CameraNode(21462, 0f, 0));
|
|
cameraList.Add(new CameraNode(21584, 2f, 0));
|
|
cameraList.Add(new CameraNode(22087, 2f, 2));
|
|
cameraList.Add(new CameraNode(22467, 2f, 4));
|
|
cameraList.Add(new CameraNode(22556, 2f, 0));
|
|
cameraList.Add(new CameraNode(22636, 2f, -2));
|
|
cameraList.Add(new CameraNode(22842, 2f, 0));
|
|
}
|
|
private IEnumerator Init()
|
|
{
|
|
yield return null;
|
|
videoLoading.Init();//初始化loading页面
|
|
}
|
|
public int GetFrameKm()
|
|
{
|
|
var s = mediaPlayer.Info.GetDurationFrames();
|
|
FrameKM = (int)Math.Floor(s / (mapData.TotalDistance * 1000));
|
|
return FrameKM;
|
|
}
|
|
VideoLoading videoLoading { get; set; }
|
|
// Update is called once per frame
|
|
float timer = 0f;
|
|
void Update()
|
|
{
|
|
timer -= Time.deltaTime;
|
|
while (timer <= 0)
|
|
{
|
|
if (cyclingController == null)
|
|
return;
|
|
cyclingController.Run(null);
|
|
var onlineRiders = cyclingController.riders;
|
|
try
|
|
{
|
|
CreateOnlineUser(onlineRiders);
|
|
test = cameraSplineCp.AbsolutePosition;
|
|
testN = splineController.Position - startOffset;
|
|
//ControlCamera();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.Log(e.Message);
|
|
}
|
|
|
|
timer += 1f;
|
|
}
|
|
}
|
|
MapRouteRankingList rankingList;
|
|
public MapRouteRankingList GetRankingList(string type = "month")
|
|
{
|
|
var endTime = UIManager.Now == null ? DateTime.Now : UIManager.Now.GetDateTime();
|
|
var startTime = Helper.GetStartTime(endTime, type);
|
|
var list = ConfigHelper.mapApi.GetRouteRanking(App.RouteIdParam, "1", 0, 10, "", startTime,endTime);
|
|
if (list.result)
|
|
{
|
|
rankingList = list.data;
|
|
}
|
|
return rankingList;
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
//var currentFrame = GetCurrentFrame();
|
|
//CameraNode pre = null;
|
|
//CameraNode next = null;
|
|
//for (int i = 0; i < cameraList.Count; i++)
|
|
//{
|
|
// if (cameraList[i].Frame >= currentFrame)
|
|
// {
|
|
// pre = i > 0 ? cameraList[i - 1] : cameraList[i];
|
|
// next = cameraList[i];
|
|
// break;
|
|
// }
|
|
//}
|
|
//if (pre == null || next == null)
|
|
//{
|
|
// return;
|
|
//}
|
|
//var x = (next.Frame - pre.Frame) * (next.X - pre.X) == 0 ? pre.X : (float)(pre.X + ((currentFrame - pre.Frame) / (next.Frame - pre.Frame)) * (next.X - pre.X));
|
|
//var y = (next.Frame - pre.Frame) * (next.Y - pre.Y) == 0 ? pre.Y : (float)(pre.Y + ((currentFrame - pre.Frame) / (next.Frame - pre.Frame)) * (next.Y - pre.Y));
|
|
//Camera.main.transform.localEulerAngles = new Vector3((float)Math.Round(x, 3), (float)Math.Round(y, 3), 0);//currentCameraRotation;//Vector3.SmoothDamp(Camera.main.transform.localEulerAngles, currentCameraRotation, ref mVelocity, 0.5f);
|
|
}
|
|
float velocity;
|
|
float test = 0;
|
|
float testN = 0;
|
|
private void ControlCamera()
|
|
{
|
|
bool finish = GetCurrentFrame() == mediaPlayer.Info.GetMaxFrameNumber();
|
|
if (splineController.Position - startOffset > 0 && !finish)
|
|
cameraSplineCp.AbsolutePosition = splineController.Position - startOffset;//(float)Math.Round(Mathf.SmoothDamp(cameraSplineCp.AbsolutePosition, splineController.Position - startOffset, ref velocity, 0.2f),3);
|
|
}
|
|
|
|
//创建当前线路其他选手
|
|
private void CreateOnlineUser(List<BaseRider> list)
|
|
{
|
|
if (list == null || list.Count == 0)
|
|
return;
|
|
CreateCurrentPlayer(list);
|
|
|
|
var onlinelist = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
|
|
var currentPlayerInfo = onlinelist.Where(c => c.Id == CurrentPlayer.UserId).FirstOrDefault();
|
|
var players = FindObjectsOfType<OnlineVideoPlayer>();
|
|
//移除
|
|
foreach (var item in players)
|
|
{
|
|
var currentItem = list.Where(c => c.UserId == item.UserId).FirstOrDefault();
|
|
if (currentItem == null)
|
|
{
|
|
item.Destroy();
|
|
if (currentOnlineCount > 1) {
|
|
currentOnlineCount--;
|
|
}
|
|
}
|
|
}
|
|
//新增/更新
|
|
var pagedList = list.Where(c=>Math.Abs(c.EndDistance-CurrentPlayer.totalDistance)*1000 <= 150).Take(5).ToList();
|
|
foreach (var item in pagedList)
|
|
{
|
|
var onlineRider = item as OnlineRiderModel;
|
|
var exsit = players.Where(c => c.UserId == item.UserId).FirstOrDefault();
|
|
if (exsit != null)
|
|
{
|
|
var online = exsit.GetComponent<OnlineVideoPlayer>();
|
|
|
|
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
|
|
}
|
|
else
|
|
{
|
|
if (currentPlayerInfo != null)
|
|
{
|
|
var diff = item.EndDistance % mapData.TotalDistance - currentPlayerInfo.EndDistance % mapData.TotalDistance;
|
|
if (Math.Abs(diff * 1000) <= 150)
|
|
{
|
|
GameObject obj;
|
|
if (currentPlayerInfo.Sex == 1)
|
|
{
|
|
obj = Instantiate(OnlinePlayer, transform);
|
|
}
|
|
else
|
|
{
|
|
obj = Instantiate(OnlinePlayer_NV, transform);
|
|
}
|
|
var spline = FindObjectOfType<CurvySpline>();
|
|
obj.GetComponent<SplineController>().Spline = spline;
|
|
var online = obj.GetComponentInChildren<OnlineVideoPlayer>();
|
|
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power, currentPlayerInfo.EndDistance, onlineRider.FrameRate.Value);
|
|
online.xOffset = slots[currentOnlineCount];
|
|
obj.transform.GetChild(0).DOLocalMoveX(slots[currentOnlineCount], 1);
|
|
currentOnlineCount++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//观察者模式随机选择当前骑行的人作为观察对象
|
|
private void CreateCurrentPlayer(List<BaseRider> list)
|
|
{
|
|
if (_aRMode == ARMode.INSPECT && CurrentPlayer == null)
|
|
{
|
|
var currentPlayer = list.FirstOrDefault();
|
|
if (currentPlayer != null)
|
|
{
|
|
var onlineRider = currentPlayer as OnlineRiderModel;
|
|
GameObject obj;
|
|
if (onlineRider.Sex == 1)
|
|
{
|
|
obj = Instantiate(OnlinePlayer, transform);
|
|
}
|
|
else
|
|
{
|
|
obj = Instantiate(OnlinePlayer_NV, transform);
|
|
}
|
|
var online = obj.GetComponent<OnlineVideoPlayer>();
|
|
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, onlineRider.TotalTicks, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance, onlineRider.FrameRate.Value);
|
|
obj.transform.DOMoveX(0, 1);
|
|
ChangePlayer(currentPlayer.UserId);
|
|
CurrentPlayer = online;
|
|
}
|
|
}
|
|
}
|
|
//设置当前是骑行模式还是观察模式
|
|
public void SetCurrentMode(ARMode aRMode)
|
|
{
|
|
_aRMode = aRMode;
|
|
var uimanager = FindObjectOfType<VideoUIManager>();
|
|
uimanager.SetCurrentMode(aRMode);
|
|
if (_aRMode != ARMode.INSPECT)
|
|
{
|
|
InitCurrentPlayer();
|
|
ContinueAsync();
|
|
}
|
|
else
|
|
{
|
|
SetCyclingModel(CyclingModel.Single);
|
|
}
|
|
}
|
|
public GameObject videoPlayer;
|
|
public GameObject Controller;
|
|
public GameObject target;
|
|
public SplineController splineController;
|
|
//初始化人物模型
|
|
public void InitCurrentPlayer()
|
|
{
|
|
//初始化位置
|
|
var firstpoint = mockDirection.FirstOrDefault();
|
|
//videoPlayer.transform.DOMove(, 0);
|
|
var p = new Vector3(firstpoint.PositionX, firstpoint.PositionY, firstpoint.PositionZ);
|
|
if (App.CurrentUser.Sex == 1)
|
|
{
|
|
var playerprefab = Resources.Load<GameObject>("UI/Prefab/AR/Controller");
|
|
playerprefab.transform.position = p;
|
|
Controller = Instantiate(playerprefab, transform);
|
|
videoPlayer = Controller.transform.Find("VidePlayer").gameObject;
|
|
}
|
|
else
|
|
{
|
|
var playerprefabNV = Resources.Load<GameObject>("UI/Prefab/AR/ControllerNV");
|
|
playerprefabNV.transform.position = p;
|
|
Controller = Instantiate(playerprefabNV, transform);
|
|
videoPlayer = Controller.transform.Find("VidePlayer_NV").gameObject;
|
|
}
|
|
|
|
var spline = FindObjectOfType<CurvySpline>();
|
|
splineController = Controller.GetComponent<SplineController>();
|
|
splineController.Spline = spline;
|
|
target = Controller.transform.Find("target").gameObject;
|
|
CurrentPlayer = videoPlayer.GetComponent<VideoPlayer>();
|
|
splineController.Position = startOffset;
|
|
#if UNITY_EDITOR
|
|
|
|
//var txt = Resources.Load<TextAsset>("UI/camera");
|
|
//var ss = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Vector3>>(txt.text);
|
|
|
|
//var curvy = CurvySpline.Create();
|
|
//curvy.Interpolation = CurvyInterpolation.Bezier;
|
|
//ss.Take(10);
|
|
//foreach (var item in ss)
|
|
//{
|
|
// //GameObject o = new GameObject("oo");
|
|
// //var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
|
// //cube.transform.SetParent(o.transform);
|
|
// //cube.transform.position = item;
|
|
// curvy.Add(item);
|
|
//}
|
|
|
|
|
|
////生成轨迹
|
|
//foreach (var item in spline.ControlPointsList)
|
|
//{
|
|
// GameObject o = new GameObject("oo");
|
|
// var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
|
|
// cube.transform.SetParent(o.transform);
|
|
// cube.transform.position = new Vector3(0, 0f, 0f);
|
|
// var cp = o.AddComponent<SplineController>();
|
|
// cp.Spline = spline;
|
|
// cp.Position = item.Distance;
|
|
//}
|
|
#endif
|
|
}
|
|
|
|
Vector3 origin = new Vector3(0, -1, 3);
|
|
//切换人物
|
|
public void ChangePlayer(int userId)
|
|
{
|
|
var players = FindObjectsOfType<OnlineVideoPlayer>();
|
|
if (players != null)
|
|
{
|
|
CurrentPlayer = players.Where(c => c.UserId == userId).FirstOrDefault();
|
|
if (CurrentPlayer != null) {
|
|
var currentFrames = DistanceToFrames(CurrentPlayer.totalDistance);
|
|
//获取当前人物的帧数
|
|
SetCurrentFrame(currentFrames);
|
|
//设置人物的位置
|
|
CurrentPlayer.transform.position = origin;
|
|
|
|
}
|
|
else
|
|
{
|
|
var onlineRiders = cyclingController.riders;
|
|
var currentPlayer = onlineRiders.Where(c => c.UserId == userId).FirstOrDefault();
|
|
if (currentPlayer != null)
|
|
{
|
|
var onlineRider = currentPlayer as OnlineRiderModel;
|
|
var obj = Instantiate(OnlinePlayer, transform);
|
|
var online = obj.GetComponent<OnlineVideoPlayer>();
|
|
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance-onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, 0, onlineRider.UserId, onlineRider.Power, onlineRider.EndDistance, onlineRider.FrameRate.Value);
|
|
obj.transform.position = origin;
|
|
CurrentPlayer = online;
|
|
var currentFrames = DistanceToFrames(CurrentPlayer.totalDistance);
|
|
//获取当前人物的帧数
|
|
SetCurrentFrame(currentFrames);
|
|
}
|
|
var clearList = players.Where(c => c.UserId != userId);
|
|
foreach (var item in clearList)
|
|
{
|
|
item.Destroy();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//初始化骑行选手横向插槽
|
|
private void InitSlots()
|
|
{
|
|
for (float i = -2f; i <= 2; i+=0.5f)
|
|
{
|
|
if (i != 0)
|
|
{
|
|
var j = i < 0 ? i - 0.1f : i + 0.1f;
|
|
slots.Add(j);
|
|
}
|
|
}
|
|
slots = slots.OrderBy(c => Math.Abs(c)).ToList();
|
|
}
|
|
|
|
//获取角色头顶信息预制件
|
|
public GameObject GetHeadInfo()
|
|
{
|
|
return infoPanel;
|
|
}
|
|
//骑行记录
|
|
public void ContinueAsync()
|
|
{
|
|
//骑行结果
|
|
if (App.routeResult != null)
|
|
{
|
|
routeResult = App.routeResult;
|
|
selectParamModel = App.routeResult.ContinueCyclingParam;//继续骑行
|
|
SetCyclingModel(CyclingModel.Single);
|
|
endDistance = routeResult.EndDistance;
|
|
SetCurrentFrame(routeResult.LastFrame ?? 0);
|
|
var v = FindObjectOfType<VideoPlayer>();
|
|
v.SetEndDistance(endDistance);
|
|
}
|
|
}
|
|
private void MockDirection()
|
|
{
|
|
//var arr = mapRoute.ARConfig.Replace("\r\n", " ").Split(' ');
|
|
var text = Resources.Load<TextAsset>("UI/direction");
|
|
var arr = text.text.Replace("\r\n", " ").Split(' ');
|
|
foreach (var item in arr)
|
|
{
|
|
if (string.IsNullOrEmpty(item))
|
|
continue;
|
|
var c = CustomRange.Read(item);
|
|
mockDirection.Add(c);
|
|
}
|
|
}
|
|
//设置骑行模式
|
|
public void SetCyclingModel(CyclingModel mode)
|
|
{
|
|
startTime = UIManager.Now.GetDateTime();
|
|
this.cyclingModel = mode;
|
|
switch (cyclingModel)
|
|
{
|
|
case CyclingModel.Single:
|
|
cyclingController = new SingleModel(route, selectParamModel);
|
|
break;
|
|
case CyclingModel.GameRoom:
|
|
cyclingController = new GameModel(route, selectParamModel);
|
|
break;
|
|
}
|
|
}
|
|
//开始游戏
|
|
public void StartGame()
|
|
{
|
|
if (startTime == null)
|
|
{
|
|
startTime = UIManager.Now.GetDateTime();
|
|
}
|
|
isStart = true;
|
|
}
|
|
//骑行是否开始
|
|
public bool IsStart()
|
|
{
|
|
return isStart;
|
|
}
|
|
//获取UI
|
|
public Transform GetCanvasTransform()
|
|
{
|
|
return transform.Find("Canvas/Panel");
|
|
}
|
|
//设置视频源文件
|
|
public void SetMedia(string path)
|
|
{
|
|
if (mediaPlayer != null)
|
|
{
|
|
mediaPlayer.OpenMedia(new MediaPath(path,MediaPathType.AbsolutePathOrURL),false);
|
|
}
|
|
}
|
|
//是否停止
|
|
public bool IsQuit()
|
|
{
|
|
return isStop;
|
|
}
|
|
double preframe = 0;
|
|
double preDistance = 0;
|
|
|
|
public void Play(float ratio)
|
|
{
|
|
mediaPlayer.PlaybackRate = ratio;
|
|
mediaPlayer.Play();
|
|
}
|
|
//设置当前视频播放速度
|
|
public void Play(int index, double distance)
|
|
{
|
|
if (!isStart && _aRMode == ARMode.RIDE)
|
|
return;
|
|
if (mediaPlayer != null)
|
|
{
|
|
//mediaPlayer.PlaybackRate = totalDistance;
|
|
//if (!mediaPlayer.Control.IsPlaying())
|
|
// mediaPlayer.Play();
|
|
//var frames = DistanceToFrames(totalDistance);
|
|
//var frame = DistanceToTimers(totalDistance);
|
|
//StartCoroutine(DOCameraAnimation(cameraSplineCp.Position, totalDistance - preDistance));
|
|
//StartCoroutine(DOTrackAnimation(preDistance, totalDistance - preDistance));
|
|
|
|
//var result = (float)(totalDistance * ratio);
|
|
//var s1 = frameList.OrderBy(c => c.Distance).Where(c => c.Distance > result).FirstOrDefault();
|
|
//var s2 = frameList.OrderByDescending(c => c.Distance).Where(c => c.Distance <= result).FirstOrDefault();
|
|
//var frame = s2.Second + (result - s2.Distance) / (s1.Distance - s2.Distance) * (s1.Second - s2.Second);
|
|
//StartCoroutine(DOSeekToFrame(preframe, frame - preframe));
|
|
//preframe = frame;
|
|
//preDistance = totalDistance;
|
|
//index = > Spline.AbsolutePosition mediaPlayer.seek()
|
|
var ttt = mediaPlayer.Info.GetDurationFrames();
|
|
double offset = 0;
|
|
if (index + 1 < splineController.Spline.ControlPointsList.Count)
|
|
{
|
|
var total = splineController.Spline.ControlPointsList[index + 1].Distance - splineController.Spline.ControlPointsList[index].Distance;
|
|
offset = distance / mapData.List[index].Distance * total;
|
|
}
|
|
|
|
var currentProcess = index +distance / mapData.List[index].Distance;
|
|
var currentDistance = splineController.Spline.ControlPointsList[index].Distance + offset;
|
|
|
|
StartCoroutine(PlayMoive(preframe, currentProcess - preframe));
|
|
StartCoroutine(PlayPosition(preDistance, currentDistance - preDistance));
|
|
|
|
preframe = currentProcess;
|
|
preDistance = currentDistance;
|
|
}
|
|
if (startTime == null)
|
|
{
|
|
startTime = UIManager.Now.GetDateTime();
|
|
}
|
|
}
|
|
//暂停
|
|
public void Pause()
|
|
{
|
|
isStart = !isStart;
|
|
isStop = !isStop;
|
|
}
|
|
//退出骑行
|
|
public void Quit()
|
|
{
|
|
mediaPlayer?.Pause();//暂停视频
|
|
isStart = false;
|
|
isStop = true;
|
|
mediaPlayer?.Stop();
|
|
}
|
|
//获取当前视频帧数
|
|
public int GetCurrentFrame()
|
|
{
|
|
return mediaPlayer.Control.GetCurrentTimeFrames();
|
|
}
|
|
public double GetCurrentDuration()
|
|
{
|
|
return mediaPlayer.Control.GetCurrentTime();
|
|
}
|
|
//距离换算成视频帧数
|
|
public int DistanceToFrames(double distance)
|
|
{
|
|
var frames = mediaPlayer.Info.GetMaxFrameNumber(); //视频打开后生效
|
|
var TotalDistance = route?.TotalDistance ?? 0;
|
|
distance %= TotalDistance;
|
|
return TotalDistance > 0 ? Convert.ToInt32(frames / TotalDistance * distance) : 0;
|
|
}
|
|
public double DistanceToTimers(double distance)
|
|
{
|
|
var timers = mediaPlayer.Info.GetDuration();
|
|
var TotalDistance = route?.TotalDistance ?? 0;
|
|
distance %= TotalDistance;
|
|
return TotalDistance > 0 ? (timers / TotalDistance) * distance : 0;
|
|
}
|
|
public int GetFrameOffSet(double distance)
|
|
{
|
|
var currentFrame = GetCurrentFrame();
|
|
var frames = mediaPlayer.Info.GetMaxFrameNumber(); //视频打开后生效
|
|
var TotalDistance = route?.TotalDistance ?? 0;
|
|
TotalDistance *= 1000;
|
|
distance %= TotalDistance;
|
|
var offset = TotalDistance > 0 ? Convert.ToInt32(frames / TotalDistance * distance) : 0;
|
|
return currentFrame + offset;
|
|
}
|
|
//设置当前视频播放进度
|
|
public void SetCurrentFrame(int seq)
|
|
{
|
|
mediaPlayer?.Control.SeekToFrame(seq);
|
|
}
|
|
Vector3 currentCameraRotation = Vector3.zero;
|
|
Vector3 mVelocity;
|
|
float prePos = 0f;
|
|
public float ratio = 111.676f;
|
|
private IEnumerator DOTrackAnimation(double preDistance, double offset)
|
|
{
|
|
float t = 0;
|
|
while (t < 1)
|
|
{
|
|
t += Time.deltaTime;
|
|
//当前分段距离
|
|
var result = preDistance + offset * t;
|
|
if (splineController != null)
|
|
{
|
|
//(float)(result * 194.52916f); //
|
|
splineController.Position = (float)(result * ratio);//(float)(s2.Distance + (result - s2.Second) / (s1.Second - s2.Second) * (s1.Distance - s2.Distance)); //(float)(result / (double)s1.Key * s1.Value);
|
|
cameraSplineCp.Position = splineController.Position;
|
|
//splineController.Position>3? splineController.Position - 3f : splineController.Position-0.1f;
|
|
//控制摄像头的角度
|
|
//currentCameraRotation.y = (float)(s2.CameraRotation + ((result - s2.Second) / (s1.Second - s2.Second)) * (s1.CameraRotation - s2.CameraRotation));
|
|
//Camera.main.transform.localEulerAngles = currentCameraRotation;//Vector3.SmoothDamp(Camera.main.transform.localEulerAngles, currentCameraRotation, ref mVelocity, 0.5f);
|
|
}
|
|
yield return null;
|
|
}
|
|
}
|
|
|
|
private IEnumerator DOCameraAnimation(double preDistance, double offset)
|
|
{
|
|
float t = 0;
|
|
while (t < 1)
|
|
{
|
|
t += Time.deltaTime;
|
|
offset = offset * ratio;
|
|
//当前分段距离
|
|
var result = preDistance + offset * t;
|
|
if (splineController != null)
|
|
{
|
|
//cameraSplineCp.Position = ()result;
|
|
}
|
|
yield return null;
|
|
}
|
|
}
|
|
private IEnumerator PlayPosition(double prePos, double offset)
|
|
{
|
|
float t = 0;
|
|
while (t <= 1)
|
|
{
|
|
t += Time.deltaTime;
|
|
double result = prePos + offset * t;
|
|
splineController.AbsolutePosition = (float)result; //(float)(result / (double)s1.Key * s1.Value);
|
|
TestSpline.AbsolutePosition = (float)result + 2f;
|
|
|
|
double result1 = prePos + offset * t/2;
|
|
cameraSplineCp.AbsolutePosition = (float)result;
|
|
yield return null;
|
|
}
|
|
}
|
|
|
|
private IEnumerator PlayMoive(double preFrame, double offset)
|
|
{
|
|
float t = 0;
|
|
while (t <= 1)
|
|
{
|
|
t += Time.deltaTime;
|
|
double result = preFrame + offset * t;
|
|
mediaPlayer?.Control.Seek(result);
|
|
yield return null;
|
|
}
|
|
}
|
|
|
|
public float startOffset = 0f;
|
|
private IEnumerator DOSeekToFrame(double preFrame, double offset)
|
|
{
|
|
float t = 0;
|
|
while (t <= 1)
|
|
{
|
|
t += Time.deltaTime;
|
|
double result = preFrame + offset * t;
|
|
mediaPlayer?.Control.Seek(result);
|
|
//currentFrame = result;
|
|
var frames = mediaPlayer.Info.GetDuration();
|
|
var s1 = frameList.OrderBy(c => c.Second).Where(c => c.Second > result).FirstOrDefault();
|
|
var s2 = frameList.OrderByDescending(c => c.Second).Where(c => c.Second <= result).FirstOrDefault();
|
|
if (splineController != null && s1 != null && s2 != null)
|
|
{
|
|
var s = (float)(s2.Distance + (result - s2.Second) / (s1.Second - s2.Second) * (s1.Distance - s2.Distance));
|
|
splineController.AbsolutePosition = startOffset + s; //(float)(result / (double)s1.Key * s1.Value);
|
|
TestSpline.AbsolutePosition = splineController.AbsolutePosition + 5f;
|
|
ControlCamera();
|
|
}
|
|
yield return null;
|
|
}
|
|
}
|
|
//获取AR骑行配置信息
|
|
|
|
//获取路书gps信息
|
|
public MapDataModel GetMapData()
|
|
{
|
|
if (mapData == null)
|
|
{
|
|
var mapApi = ConfigHelper.mapApi;
|
|
int routeId = App.RouteIdParam;
|
|
if(routeId > 0)
|
|
mapData = mapApi.GetData(routeId,0);//获取路书地理数据
|
|
}
|
|
return mapData;
|
|
}
|
|
//获取路书信息
|
|
public MapRoute GetMapRoute()
|
|
{
|
|
if (mapRoute == null)
|
|
{
|
|
var mapApi = ConfigHelper.mapApi;
|
|
int routeId = App.RouteIdParam;
|
|
mapRoute = mapApi.GetById(routeId).data;
|
|
}
|
|
return mapRoute;
|
|
}
|
|
//保存骑行记录
|
|
public void Save(double totalDistance)
|
|
{
|
|
Quit();
|
|
cyclingController.recorderData.EndTime = UIManager.Now.GetDateTime();
|
|
var path = PFConstants.MapWorkoutRecordFolder + "/" + recordId;
|
|
Assets.Scenes.Ride.Scripts.Helper.CreateDirectoryIfNotExsit(path);
|
|
string imageFileName = path + "/" + Guid.NewGuid().ToString() + ".png";
|
|
CaptureCamera(Camera.main, new Rect(Screen.width * 0f, Screen.height * 0f, Screen.width * 0.5f, Screen.height * 0.5f), imageFileName);
|
|
cyclingController.recorderData.StartTime = startTime;
|
|
cyclingController.recorderData.IsCompleted = totalDistance >= mapData.TotalDistance;
|
|
cyclingController.recorderData.EndDistance = totalDistance;
|
|
cyclingController.recorderData.AntModelId = AntModelId;
|
|
cyclingController.recorderData.ManufacturerId = ManufacturerId;
|
|
cyclingController.recorderData.ManufacturerName = ManufacturerName;
|
|
cyclingController.recorderData.DeviceNumber = DeviceNumber;
|
|
cyclingController.recorderData.LastFrame = GetCurrentFrame();
|
|
RankingId = cyclingController.recorderData.SaveWithLocalRecordAysnc(cyclingModel, selectParamModel, imageFileName, recordId, path);
|
|
}
|
|
|
|
public void AddEvent(GameObject sender, EventTriggerType eventType, UnityAction<BaseEventData> unityAction)
|
|
{
|
|
UIManager.AddEvent(sender, eventType, unityAction);
|
|
}
|
|
public Texture GetCountryImageByCode(string code)
|
|
{
|
|
return UIManager.Instance.loginRegOptions.GetCountryImage(code);
|
|
}
|
|
public Texture GetCountryImageByName(string name)
|
|
{
|
|
return UIManager.Instance.loginRegOptions.GetCountryImageByName(name);
|
|
}
|
|
//截图
|
|
protected void CaptureCamera(Camera camera, Rect rect, string fileName)
|
|
{
|
|
byte[] bytes = CaptureCameraReturnByte(camera, rect);
|
|
System.IO.File.WriteAllBytes(fileName, bytes);
|
|
}
|
|
private byte[] CaptureCameraReturnByte(Camera camera, Rect rect)
|
|
{
|
|
RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 0);
|
|
camera.targetTexture = rt;
|
|
camera.Render();
|
|
RenderTexture.active = rt;
|
|
Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
|
|
screenShot.ReadPixels(rect, 0, 0);
|
|
screenShot.Apply();
|
|
camera.targetTexture = null;
|
|
RenderTexture.active = null;
|
|
GameObject.Destroy(rt);
|
|
return screenShot.EncodeToJPG();
|
|
}
|
|
//根据距离计算下一个点坐标
|
|
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);
|
|
}
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
App.gameRoomDetail = null;
|
|
}
|
|
}
|
|
|
|
public class FrameNode
|
|
{
|
|
public int Second;
|
|
public float Distance;
|
|
public float CameraRotation;
|
|
public FrameNode(int second, float distance,float cameraRotation)
|
|
{
|
|
this.Second = second;
|
|
this.Distance = distance;
|
|
this.CameraRotation = cameraRotation;
|
|
}
|
|
}
|
|
|
|
public class CameraNode
|
|
{
|
|
public float Frame;
|
|
public float X;
|
|
public float Y;
|
|
public CameraNode(float frame, float x, float y)
|
|
{
|
|
this.Frame = frame;
|
|
this.X = x;
|
|
this.Y = y;
|
|
}
|
|
}
|
|
} |