Aimbot-ParallelEnv/Assets/Script/InGame/EnvironmentUIControl.cs
Koha9 630cbc4f70 V3.1.5 修正PlayMode中TargetUI问题
修正TargetUI初始化StayMode Button可使用的问题
修正TargetUI可使用按钮逻辑问题
修正TargetUI与TargetController联动问题
修正Enemy击杀后不死亡问题
2023-07-28 19:44:02 +09:00

208 lines
7.4 KiB
C#

using System;
using System.Text;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using XCharts.Runtime;
public class EnvironmentUIControl : MonoBehaviour
{
public GameObject targetControllerObj;
public GameObject parameterContainerObj;
public GameObject groundCanvasObj;
public GameObject chartObj;
public GameObject HUDObj;
public TextMeshProUGUI remainTimeText;
public TextMeshProUGUI targetTypeText;
public TextMeshProUGUI winLoseText;
public TextMeshProUGUI stateText;
public float resultTimeout = 1f;
public GameObject gaugeImgObj;
private StringBuilder stateBuilder = new StringBuilder();
private LineChart realTimeRewardChart = null;
private TargetController targetController;
private ParameterContainer paramContainer;
private HUDController hudController;
private Image gaugeImg;
private float overTime = 0f;
private int step = 0;
private bool resultActive = false;
// Start is called before the first frame update
private void Start()
{
targetController = targetControllerObj.GetComponent<TargetController>();
paramContainer = parameterContainerObj.GetComponent<ParameterContainer>();
gaugeImg = gaugeImgObj.GetComponent<Image>();
hudController = HUDObj.GetComponent<HUDController>();
}
// Update is called once per frame
private void Update()
{
// int remainTime = Convert.ToInt32(targetController.startTime + paramContainer.timeLimit - Time.time);
remainTimeText.text = "RemainTime:" + Convert.ToInt32(targetController.leftTime).ToString();
if (resultActive && Time.time - overTime >= resultTimeout)
{
// while result is active and show time over timeOut
// clear the result
Debug.Log("EnvironmentUIControl: clear result");
winLoseText.text = "";
winLoseText.color = Color.white;
resultActive = false;
}
}
public void UpdateChart(float reward)
{
if (hudController.chartOn && realTimeRewardChart == null)
{
InitChart();
}
step += 1;
realTimeRewardChart.AddXAxisData(Convert.ToString(step));
realTimeRewardChart.AddData(0, reward);
}
public void InitChart()
{
if (hudController.chartOn && realTimeRewardChart == null)
{
Vector3 chartPos = new Vector3(-210f, 90f, 0f) * groundCanvasObj.transform.localScale.x;
realTimeRewardChart = chartObj.AddComponent<LineChart>();
realTimeRewardChart.Init();
}
realTimeRewardChart.RemoveData();
realTimeRewardChart.AddSerie<Line>("Rewards");
}
public void RemoveChart()
{
GameObject.Destroy(realTimeRewardChart);
realTimeRewardChart = null;
}
// show result in UI
public void ShowResult(int resultState)
{
switch (resultState)
{
case (int)TargetController.EndType.Win:
//Win
Debug.Log("win");
winLoseText.text = "Win";
winLoseText.color = Color.green;
overTime = Time.time;
resultActive = true;
break;
case (int)TargetController.EndType.Lose:
//lose
Debug.Log("lose");
winLoseText.text = "Lose";
winLoseText.color = Color.red;
overTime = Time.time;
resultActive = true;
break;
default:
break;
}
}
// update firebases target state gauge
public void UpdateTargetGauge(float firebasesBelong, float belongMaxPoint)
{
if (firebasesBelong >= 0)
{
gaugeImgObj.transform.localPosition = new Vector3(25f, 0, 0);
gaugeImg.color = Color.blue;
gaugeImg.fillOrigin = 0;
gaugeImg.fillAmount = firebasesBelong / belongMaxPoint;
}
else
{
gaugeImgObj.transform.localPosition = new Vector3(-25f, 0, 0);
gaugeImg.color = Color.red;
gaugeImg.fillOrigin = 1;
gaugeImg.fillAmount = -firebasesBelong / belongMaxPoint;
}
}
// update targetType text
public void UpdateTargetType(int targetInt)
{
switch (targetInt)
{
case (int)SceneBlockContainer.Targets.Go:
targetTypeText.text = "GOTO";
targetTypeText.color = Color.blue;
break;
case (int)SceneBlockContainer.Targets.Attack:
targetTypeText.text = "Attack!";
targetTypeText.color = Color.red;
break;
case (int)SceneBlockContainer.Targets.Defence:
targetTypeText.text = "Defence";
targetTypeText.color = Color.green;
break;
case (int)SceneBlockContainer.Targets.Free:
targetTypeText.text = "Free";
targetTypeText.color = Color.yellow;
break;
case (int)SceneBlockContainer.Targets.Stay:
targetTypeText.text = "Stay";
targetTypeText.color = Color.white;
break;
default:
targetTypeText.text = "TYPE ERROR";
targetTypeText.color = Color.red;
break;
}
}
// update state text
// public TextMeshProUGUI stateText;
// targetState[0] = targetTypeInt;
// targetState[1] = targetPosition.x / raySensors.viewDistance; // normalization
// targetState[2] = targetPosition.y / raySensors.viewDistance;
// targetState[3] = targetPosition.z / raySensors.viewDistance;
// targetState[4] = blockCont.thisBlock.firebasesAreaDiameter / raySensors.viewDistance;
// targetState[5] = blockCont.thisBlock.belongRatio;
// float[] myObserve = { transform.localPosition.x/raySensors.viewDistance, transform.localPosition.y / raySensors.viewDistance, transform.localPosition.z / raySensors.viewDistance, transform.eulerAngles.y/360f }
// ??????????string??"targetType: 1.0 \r\n targetX: 2.0 \r\n"
public void UpdateStateText(float[] targetStates, float inAreaState, float remainTime, bool gunReadyToggle, float[] myObserve, float[] rayTagResultOnehot, float[] rayDisResult)
{
stateBuilder.Clear();
stateBuilder.Append($"States:\r\nTType:{targetStates[0]}");
stateBuilder.Append("\r\nTargetPosition:\r\nx:");
stateBuilder.Append(targetStates[1]);
stateBuilder.Append("\r\ny:");
stateBuilder.Append(targetStates[2]);
stateBuilder.Append("\r\nz:");
stateBuilder.Append(targetStates[3]);
stateBuilder.Append("\r\nTargetDiameter:");
stateBuilder.Append(targetStates[4]);
stateBuilder.Append("\r\nTargetBelongRatio:");
stateBuilder.Append(targetStates[5]);
stateBuilder.Append("\r\nInArea:");
stateBuilder.Append(inAreaState);
stateBuilder.Append("\r\nRemainTime:");
stateBuilder.Append(remainTime);
stateBuilder.Append("\r\nGunReady:");
stateBuilder.Append(gunReadyToggle);
stateBuilder.Append("\r\nMyPosition:");
stateBuilder.Append(myObserve[0]).Append(myObserve[1]).Append(myObserve[2]);
stateBuilder.Append("\r\nMyRotation:");
stateBuilder.Append(myObserve[3]);
stateText.text = stateBuilder.ToString();
}
}