218 lines
8.7 KiB
C#
218 lines
8.7 KiB
C#
using Code.Base;
|
|
using Code.Lab1;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using UnityEngine.UI;
|
|
|
|
namespace Code.UI
|
|
{
|
|
public class Lab1Controller : MonoBehaviour
|
|
{
|
|
[SerializeField] private Agent pursueAgent;
|
|
[SerializeField] private Agent evadeAgent;
|
|
|
|
[SerializeField] private Transform pursueWrapper;
|
|
[SerializeField] private Transform evadeWrapper;
|
|
|
|
[SerializeField] private Button exitButton;
|
|
|
|
private Slider _pursueMaxPredictionSlider;
|
|
private Slider _pursueMaxSpeedSlider;
|
|
private Slider _pursueMaxAccelerationSlider;
|
|
private Slider _pursueOrientationSlider;
|
|
|
|
private Slider _evadeMaxPredictionSlider;
|
|
private Slider _evadeMaxSpeedSlider;
|
|
private Slider _evadeMaxAccelerationSlider;
|
|
private Slider _evadeOrientationSlider;
|
|
|
|
private TMP_Text _pursueRotationVelocityText;
|
|
private TMP_Text _evadeRotationVelocityText;
|
|
|
|
private Pursue _pursueBehaviour;
|
|
private Evade _evadeBehaviour;
|
|
|
|
private void Awake()
|
|
{
|
|
_pursueMaxPredictionSlider = GetSlider(pursueWrapper, "MaxPredictionSlider");
|
|
_pursueMaxSpeedSlider = GetSlider(pursueWrapper, "MaxSpeedSlider");
|
|
_pursueMaxAccelerationSlider = GetSlider(pursueWrapper, "MaxAccelerationSlider");
|
|
_pursueOrientationSlider = GetSlider(pursueWrapper, "OrientationSlider");
|
|
|
|
_evadeMaxPredictionSlider = GetSlider(evadeWrapper, "MaxPredictionSlider");
|
|
_evadeMaxSpeedSlider = GetSlider(evadeWrapper, "MaxSpeedSlider");
|
|
_evadeMaxAccelerationSlider = GetSlider(evadeWrapper, "MaxAccelerationSlider");
|
|
_evadeOrientationSlider = GetSlider(evadeWrapper, "OrientationSlider");
|
|
|
|
_pursueRotationVelocityText = GetText(pursueWrapper, "RotationVelocityText");
|
|
_evadeRotationVelocityText = GetText(evadeWrapper, "RotationVelocityText");
|
|
|
|
_pursueBehaviour = pursueAgent.GetComponent<Pursue>();
|
|
_evadeBehaviour = evadeAgent.GetComponent<Evade>();
|
|
|
|
if (_pursueBehaviour == null)
|
|
Debug.LogWarning("PursueBehaviour not found on PursueAgent!");
|
|
if (_evadeBehaviour == null)
|
|
Debug.LogWarning("EvadeBehaviour not found on EvadeAgent!");
|
|
|
|
if (exitButton != null)
|
|
exitButton.onClick.AddListener(LoadMainMenu);
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
UpdatePursueSliders();
|
|
UpdateEvadeSliders();
|
|
|
|
if (_pursueMaxPredictionSlider != null)
|
|
_pursueMaxPredictionSlider.onValueChanged.AddListener(OnPursueMaxPredictionChanged);
|
|
if (_pursueMaxSpeedSlider != null)
|
|
_pursueMaxSpeedSlider.onValueChanged.AddListener(OnPursueMaxSpeedChanged);
|
|
if (_pursueMaxAccelerationSlider != null)
|
|
_pursueMaxAccelerationSlider.onValueChanged.AddListener(OnPursueMaxAccelerationChanged);
|
|
if (_pursueOrientationSlider != null)
|
|
_pursueOrientationSlider.onValueChanged.AddListener(OnPursueOrientationChanged);
|
|
|
|
if (_evadeMaxPredictionSlider != null)
|
|
_evadeMaxPredictionSlider.onValueChanged.AddListener(OnEvadeMaxPredictionChanged);
|
|
if (_evadeMaxSpeedSlider != null)
|
|
_evadeMaxSpeedSlider.onValueChanged.AddListener(OnEvadeMaxSpeedChanged);
|
|
if (_evadeMaxAccelerationSlider != null)
|
|
_evadeMaxAccelerationSlider.onValueChanged.AddListener(OnEvadeMaxAccelerationChanged);
|
|
if (_evadeOrientationSlider != null)
|
|
_evadeOrientationSlider.onValueChanged.AddListener(OnEvadeOrientationChanged);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
UpdatePursueSliders();
|
|
UpdateEvadeSliders();
|
|
}
|
|
|
|
private static Slider GetSlider(Transform parent, string sliderName)
|
|
{
|
|
var sliderObj = parent.Find(sliderName);
|
|
return sliderObj != null ? sliderObj.GetComponent<Slider>() : null;
|
|
}
|
|
|
|
private static TMP_Text GetText(Transform parent, string textName)
|
|
{
|
|
var textObj = parent.Find(textName);
|
|
return textObj != null ? textObj.GetComponent<TMP_Text>() : null;
|
|
}
|
|
|
|
private void UpdatePursueSliders()
|
|
{
|
|
if (_pursueBehaviour == null) return;
|
|
|
|
if (_pursueMaxPredictionSlider != null)
|
|
_pursueMaxPredictionSlider.value = _pursueBehaviour.maxPrediction;
|
|
if (_pursueMaxSpeedSlider != null)
|
|
_pursueMaxSpeedSlider.value = pursueAgent.maxSpeed;
|
|
if (_pursueMaxAccelerationSlider != null)
|
|
_pursueMaxAccelerationSlider.value = pursueAgent.maxAcceleration;
|
|
if (_pursueOrientationSlider != null)
|
|
_pursueOrientationSlider.value = pursueAgent.orientation;
|
|
|
|
if (_pursueRotationVelocityText == null) return;
|
|
|
|
var rotation = pursueAgent.rotation;
|
|
var velocity = pursueAgent.velocity;
|
|
|
|
_pursueRotationVelocityText.text =
|
|
$"Rotation: {rotation:F2}\nVelocity: X {velocity.x:F2} Y {velocity.y:F2} Z {velocity.z:F2}";
|
|
}
|
|
|
|
private void OnPursueMaxPredictionChanged(float value)
|
|
{
|
|
if (_pursueBehaviour != null) _pursueBehaviour.maxPrediction = value;
|
|
}
|
|
|
|
private void OnPursueMaxSpeedChanged(float value)
|
|
{
|
|
if (pursueAgent != null) pursueAgent.maxSpeed = value;
|
|
}
|
|
|
|
private void OnPursueMaxAccelerationChanged(float value)
|
|
{
|
|
if (pursueAgent != null) pursueAgent.maxAcceleration = value;
|
|
}
|
|
|
|
private void OnPursueOrientationChanged(float value)
|
|
{
|
|
if (pursueAgent != null) pursueAgent.orientation = value % 360f;
|
|
}
|
|
|
|
private void UpdateEvadeSliders()
|
|
{
|
|
if (_evadeBehaviour == null) return;
|
|
|
|
if (_evadeMaxPredictionSlider != null)
|
|
_evadeMaxPredictionSlider.value = _evadeBehaviour.maxPrediction;
|
|
if (_evadeMaxSpeedSlider != null)
|
|
_evadeMaxSpeedSlider.value = evadeAgent.maxSpeed;
|
|
if (_evadeMaxAccelerationSlider != null)
|
|
_evadeMaxAccelerationSlider.value = evadeAgent.maxAcceleration;
|
|
if (_evadeOrientationSlider != null)
|
|
_evadeOrientationSlider.value = evadeAgent.orientation;
|
|
|
|
if (_evadeRotationVelocityText == null) return;
|
|
|
|
var rotation = evadeAgent.rotation;
|
|
var velocity = evadeAgent.velocity;
|
|
|
|
_evadeRotationVelocityText.text =
|
|
$"Rotation: {rotation:F2}\nVelocity: X {velocity.x:F2} Y {velocity.y:F2} Z {velocity.z:F2}";
|
|
}
|
|
|
|
private void OnEvadeMaxPredictionChanged(float value)
|
|
{
|
|
if (_evadeBehaviour != null) _evadeBehaviour.maxPrediction = value;
|
|
}
|
|
|
|
private void OnEvadeMaxSpeedChanged(float value)
|
|
{
|
|
if (evadeAgent != null) evadeAgent.maxSpeed = value;
|
|
}
|
|
|
|
private void OnEvadeMaxAccelerationChanged(float value)
|
|
{
|
|
if (evadeAgent != null) evadeAgent.maxAcceleration = value;
|
|
}
|
|
|
|
private void OnEvadeOrientationChanged(float value)
|
|
{
|
|
if (evadeAgent != null) evadeAgent.orientation = value % 360f;
|
|
}
|
|
|
|
private static void LoadMainMenu()
|
|
{
|
|
SceneManager.LoadScene("MainMenu");
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (_pursueMaxPredictionSlider != null)
|
|
_pursueMaxPredictionSlider.onValueChanged.RemoveListener(OnPursueMaxPredictionChanged);
|
|
if (_pursueMaxSpeedSlider != null)
|
|
_pursueMaxSpeedSlider.onValueChanged.RemoveListener(OnPursueMaxSpeedChanged);
|
|
if (_pursueMaxAccelerationSlider != null)
|
|
_pursueMaxAccelerationSlider.onValueChanged.RemoveListener(OnPursueMaxAccelerationChanged);
|
|
if (_pursueOrientationSlider != null)
|
|
_pursueOrientationSlider.onValueChanged.RemoveListener(OnPursueOrientationChanged);
|
|
|
|
if (_evadeMaxPredictionSlider != null)
|
|
_evadeMaxPredictionSlider.onValueChanged.RemoveListener(OnEvadeMaxPredictionChanged);
|
|
if (_evadeMaxSpeedSlider != null)
|
|
_evadeMaxSpeedSlider.onValueChanged.RemoveListener(OnEvadeMaxSpeedChanged);
|
|
if (_evadeMaxAccelerationSlider != null)
|
|
_evadeMaxAccelerationSlider.onValueChanged.RemoveListener(OnEvadeMaxAccelerationChanged);
|
|
if (_evadeOrientationSlider != null)
|
|
_evadeOrientationSlider.onValueChanged.RemoveListener(OnEvadeOrientationChanged);
|
|
|
|
if (exitButton != null)
|
|
exitButton.onClick.RemoveListener(LoadMainMenu);
|
|
}
|
|
}
|
|
} |