Aimbot-ParallelEnv/Assets/Script/InGame/EnvironmentUIControl.cs
Koha9 9585845ba2 Side channel Added
add side channel to let python side know which target got win or lose.
fix update time bug. may cause double gameover check.(got another lose after reset the game.)
2022-11-30 06:39:56 +09:00

143 lines
4.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
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 TextMeshProUGUI remainTimeText;
public TextMeshProUGUI targetTypeText;
public TextMeshProUGUI winLoseText;
public float resultTimeout = 1f;
public GameObject gaugeImgObj;
private LineChart realTimeRewardChart = null;
private TargetController targetController;
private ParameterContainer paramContainer;
private Image gaugeImg;
private float overTime = 0f;
private int step = 0;
private bool resultActive = false;
// Start is called before the first frame update
void Start()
{
targetController = TargetControllerObj.GetComponent<TargetController>();
paramContainer = ParameterContainerObj.GetComponent<ParameterContainer>();
gaugeImg = gaugeImgObj.GetComponent<Image>();
}
// Update is called once per frame
void Update()
{
int remainTime = Convert.ToInt32(targetController.startTime + paramContainer.timeLimit - Time.time);
remainTimeText.text = "RemainTime:" + remainTime.ToString();
if (resultActive && Time.time - overTime >= resultTimeout)
{
// while result is active and show time over timeOut
// clear the result
Debug.Log("clear result");
winLoseText.text = "";
winLoseText.color = Color.white;
resultActive = false;
}
}
public void updateChart(float reward)
{
step += 1;
realTimeRewardChart.AddXAxisData(Convert.ToString(step));
realTimeRewardChart.AddData(0, reward);
}
public void initChart()
{
if (paramContainer.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");
}
// 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)TargetController.Targets.Go:
targetTypeText.text = "GOTO";
targetTypeText.color = Color.blue;
break;
case (int)TargetController.Targets.Attack:
targetTypeText.text = "Attack!";
targetTypeText.color = Color.red;
break;
case (int)TargetController.Targets.Defence:
targetTypeText.text = "Defence";
targetTypeText.color = Color.green;
break;
case (int)TargetController.Targets.Free:
targetTypeText.text = "Free";
targetTypeText.color = Color.yellow;
break;
default:
targetTypeText.text = "TYPE ERROR";
targetTypeText.color = Color.red;
break;
}
}
}