骑行代码迁移,赛事逻辑初步框架完成
This commit is contained in:
1 parent
380e67cc1e
commit
ec45246aa4
151 files changed
+7689
-3538
No files matched your search
@@ -0,0 +1,185 @@
|
||||
using Assets.Scenes.Ride.Scripts.Model;
|
||||
using Assets.Scripts;
|
||||
using Assets.Scripts.Apis.Models;
|
||||
using ChartAndGraph;
|
||||
using DG.Tweening;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using System.Linq;
|
||||
|
||||
namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
public class OnlinePlayerController : AbstractPlayer
|
||||
{
|
||||
public PlayerController _playerController;
|
||||
RawImage head;
|
||||
Image arrowImage;
|
||||
GameObject infoPanel;
|
||||
Transform uiObject;
|
||||
|
||||
string nickName;
|
||||
string weightKgStr;
|
||||
|
||||
protected override void Init()
|
||||
{
|
||||
base.Init();
|
||||
currentlatlong = mainController.GetCenterCoordinate();
|
||||
_playerController = FindObjectOfType<PlayerController>();
|
||||
//创建UI
|
||||
uiObject = transform.parent.Find("SingleUI/Panel/ArrowList");
|
||||
arrowImage = Instantiate(Resources.Load<Image>("UI/Prefab/Ride/ReviewArrow"), uiObject);
|
||||
arrowImage.color = new Color(0.1529412f, 0.8745098f, 0.8901961f);
|
||||
}
|
||||
public override bool GetStart()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
protected override void Compute()
|
||||
{
|
||||
currentlatlong = mainController.Along(totalDistance);//下一个坐标
|
||||
|
||||
diff = Math.Round((totalDistance - _playerController.TotalDistance) * 1000, 0);
|
||||
}
|
||||
double diff = 0;
|
||||
public void SetDataSource(double _totalDistance, double _distance,string Name,double weightKg,int index=0)
|
||||
{
|
||||
totalDistance = _totalDistance;
|
||||
distance = _distance;
|
||||
speed = distance*3600;
|
||||
nickName = Name;
|
||||
weightKgStr = weightKg.ToString("f2") + "W/KG";
|
||||
CurrentIndex = index;
|
||||
}
|
||||
|
||||
private string headUrl;
|
||||
public void SetHead(string url )
|
||||
{
|
||||
headUrl = url;
|
||||
}
|
||||
|
||||
public void ShowInfoPanel(Vector3 playerScreenPos)
|
||||
{
|
||||
if (infoPanel == null)
|
||||
{
|
||||
infoPanel = Instantiate(Resources.Load<GameObject>("UI/Prefab/Ride/OnlineInfoPanel"), uiObject);
|
||||
}
|
||||
var headPos = infoPanel.transform.Find("Head").position;
|
||||
var infoPos = playerScreenPos + new Vector3(150f, 60f, 0f);
|
||||
((RectTransform)infoPanel.transform).position = infoPos;
|
||||
CreateInfoLine(playerScreenPos, headPos);
|
||||
var infoHead = infoPanel.transform.Find("Head").GetComponent<RawImage>();
|
||||
if (head != null)
|
||||
{
|
||||
infoHead.texture = head.texture;
|
||||
}
|
||||
var infoName = infoPanel.transform.Find("Name").GetComponent<Text>();
|
||||
infoName.text = nickName;
|
||||
|
||||
var infoDistance = infoPanel.transform.Find("Distance").GetComponent<Text>();
|
||||
if (_playerController != null)
|
||||
{
|
||||
infoDistance.text = diff > 0? $"+{diff}M" : $"{diff}M";
|
||||
}
|
||||
var infoWKG = infoPanel.transform.Find("WKG").GetComponent<Text>();
|
||||
infoWKG.text = weightKgStr;
|
||||
|
||||
var speedText = infoPanel.transform.Find("Speed").GetComponent<Text>();
|
||||
speedText.text = speed.ToString("f1")+"KM/H";
|
||||
}
|
||||
|
||||
public void RemoveSelf()
|
||||
{
|
||||
arrowImage.gameObject?.Destroy();
|
||||
headPanel?.Destroy();
|
||||
infoPanel?.Destroy();
|
||||
transform.gameObject.Destroy();
|
||||
}
|
||||
|
||||
protected override void AfterExcute()
|
||||
{
|
||||
var playerScreenPos = Camera.main.WorldToScreenPoint(transform.position);
|
||||
((RectTransform)arrowImage.transform).position = playerScreenPos;
|
||||
|
||||
if (IsShowInfo)
|
||||
{
|
||||
ShowInfoPanel(playerScreenPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (infoPanel == null)
|
||||
return;
|
||||
_directionsGO?.Destroy();
|
||||
infoPanel.transform.GetComponent<CanvasGroup>().DOFade(0, 1).onComplete += () => {
|
||||
IsShowInfo = false;
|
||||
infoPanel?.Destroy();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
GameObject _directionsGO;
|
||||
void CreateInfoLine(Vector3 startPos,Vector3 endPos)
|
||||
{
|
||||
if (_directionsGO != null)
|
||||
{
|
||||
_directionsGO.Destroy();
|
||||
}
|
||||
startPos = Camera.main.ScreenToWorldPoint(startPos);
|
||||
//endPos.x -= 120f;
|
||||
endPos = Camera.main.ScreenToWorldPoint(endPos);
|
||||
|
||||
_directionsGO = new GameObject("InfoLinerender");
|
||||
_directionsGO.transform.SetParent(transform);
|
||||
var lineRender = _directionsGO.AddComponent<LineRenderer>();
|
||||
//lineRender.material = new Material(Shader.Find("Sprites/Default"));
|
||||
lineRender.material = Resources.Load<Material>("UI/Material/4");
|
||||
lineRender.endColor = new Color(0.1529412f, 0.8745098f, 0.8901961f, 1f);
|
||||
lineRender.startColor = new Color(0.1529412f, 0.8745098f, 0.8901961f, 1f);
|
||||
|
||||
//设置宽度
|
||||
lineRender.startWidth = 0.2f;
|
||||
lineRender.endWidth = 0.2f;
|
||||
lineRender.positionCount = 2;
|
||||
lineRender.SetPositions(new Vector3[] { startPos, endPos });
|
||||
lineRender.loop = false;
|
||||
lineRender.numCapVertices = 10;
|
||||
lineRender.numCornerVertices = 10;
|
||||
}
|
||||
|
||||
protected override void MoveGraphHead()
|
||||
{
|
||||
var itemIndex = chartDataSourceScript.GetViewIndex(CurrentIndex);
|
||||
var m = graph.DataSource.GetPoint("Player 2", itemIndex);
|
||||
|
||||
graph.PointToWorldSpace(out Vector3 itemPosition, m.x, m.y, "Player 2");
|
||||
itemPosition.x -= 12f;
|
||||
itemPosition.y += 5f;
|
||||
|
||||
if (headPanel == null)
|
||||
{
|
||||
headPanel = Instantiate(Resources.Load<GameObject>("UI/Prefab/Ride/OnlineHeadPanel"));
|
||||
headPanel.transform.SetParent(graph.transform);
|
||||
headPanel.transform.localScale = new Vector3(0.8f, 0.8f, 0.8f);
|
||||
headPanel.transform.position = itemPosition;
|
||||
}
|
||||
else
|
||||
{
|
||||
headPanel.transform.position = new Vector3(itemPosition.x, itemPosition.y, 0);
|
||||
//headPanel.transform.DOMove(new Vector3(itemPosition.x, itemPosition.y, 0), 1);
|
||||
}
|
||||
|
||||
if (head == null)
|
||||
{
|
||||
head = headPanel.GetComponentInChildren<RawImage>();
|
||||
if (!string.IsNullOrEmpty(headUrl))
|
||||
{
|
||||
Utils.DisplayImage(head, headUrl, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
headPanel.transform.Find("DefaultHead").gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user