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.)
143 lines
4.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|