Mini demo with all features
This commit is contained in:
@@ -38,6 +38,7 @@ namespace Unheimlich.UI
|
||||
private bool _shouldFollowPlayerRotation = false;
|
||||
private Transform _currentAnchor;
|
||||
private Vector3 _baseScale;
|
||||
private Vector3 _basePanelScale;
|
||||
private List<ChoiceFocusHandler> _activeChoices = new List<ChoiceFocusHandler>();
|
||||
private float _sortTimer = 0f;
|
||||
private const float SORT_INTERVAL = 0.1f;
|
||||
@@ -59,24 +60,32 @@ namespace Unheimlich.UI
|
||||
if (_dialogueCanvasGroup == null)
|
||||
_dialogueCanvasGroup = _dialoguePanel.AddComponent<CanvasGroup>();
|
||||
}
|
||||
|
||||
if (_dialoguePanel != null)
|
||||
{
|
||||
_basePanelScale = _dialoguePanel.transform.localScale;
|
||||
}
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (Player.Instance == null || !ChoiceContainer.activeInHierarchy)
|
||||
if (PlayerController.Instance == null || !ChoiceContainer.activeInHierarchy)
|
||||
return;
|
||||
|
||||
if (_shouldFollowPlayerPosition)
|
||||
ChoiceContainer.transform.position = Player.Instance.transform.position;
|
||||
ChoiceContainer.transform.position = PlayerController.Instance.transform.position;
|
||||
|
||||
if (_shouldFollowPlayerRotation)
|
||||
{
|
||||
float playerYRotation = Player.Instance.transform.eulerAngles.y;
|
||||
float playerYRotation = PlayerController.Instance.transform.eulerAngles.y;
|
||||
ChoiceContainer.transform.rotation = Quaternion.Euler(0f, playerYRotation, 0f);
|
||||
}
|
||||
|
||||
if (_currentAnimationSettings != null && _currentAnimationSettings.EnableDistanceScaling && !_shouldFollowPlayerPosition)
|
||||
{
|
||||
ApplyDistanceScaling();
|
||||
ApplyDistanceScalingToPanel();
|
||||
}
|
||||
|
||||
SortChoicesByDistance();
|
||||
}
|
||||
@@ -188,17 +197,17 @@ namespace Unheimlich.UI
|
||||
_shouldFollowPlayerPosition = followPosition;
|
||||
_shouldFollowPlayerRotation = followRotation;
|
||||
|
||||
if (followPosition && Player.Instance != null)
|
||||
if (followPosition && PlayerController.Instance != null)
|
||||
{
|
||||
Vector3 playerWorldPos = Player.Instance.transform.position;
|
||||
Vector3 playerWorldPos = PlayerController.Instance.transform.position;
|
||||
ChoiceContainer.transform.position = playerWorldPos;
|
||||
}
|
||||
else
|
||||
ChoiceContainer.transform.localPosition = Vector3.zero;
|
||||
|
||||
if (followRotation && Player.Instance != null)
|
||||
if (followRotation && PlayerController.Instance != null)
|
||||
{
|
||||
float playerYRotation = Player.Instance.transform.eulerAngles.y;
|
||||
float playerYRotation = PlayerController.Instance.transform.eulerAngles.y;
|
||||
ChoiceContainer.transform.rotation = Quaternion.Euler(0f, playerYRotation, 0f);
|
||||
}
|
||||
else
|
||||
@@ -215,7 +224,10 @@ namespace Unheimlich.UI
|
||||
SpawnChoices(nodeChoices, animationSettings);
|
||||
|
||||
if (animationSettings != null && animationSettings.EnableDistanceScaling && !_shouldFollowPlayerPosition)
|
||||
{
|
||||
ApplyDistanceScaling();
|
||||
ApplyDistanceScalingToPanel();
|
||||
}
|
||||
|
||||
bool shouldRotate = animationSettings == null || animationSettings.EnableRotation;
|
||||
if (shouldRotate)
|
||||
@@ -275,10 +287,10 @@ namespace Unheimlich.UI
|
||||
/// </summary>
|
||||
private void ApplyDistanceScaling()
|
||||
{
|
||||
if (_currentAnchor == null || Player.Instance == null)
|
||||
if (_currentAnchor == null || PlayerController.Instance == null)
|
||||
return;
|
||||
|
||||
float distance = Vector3.Distance(_currentAnchor.position, Player.Instance.transform.position);
|
||||
float distance = Vector3.Distance(_currentAnchor.position, PlayerController.Instance.transform.position);
|
||||
|
||||
float normalizedDistance = Mathf.InverseLerp(_currentAnimationSettings.MinDistance, _currentAnimationSettings.MaxDistance, distance);
|
||||
|
||||
@@ -286,6 +298,20 @@ namespace Unheimlich.UI
|
||||
|
||||
ChoiceContainer.transform.localScale = _baseScale * finalScale;
|
||||
}
|
||||
|
||||
private void ApplyDistanceScalingToPanel()
|
||||
{
|
||||
if (_currentAnchor == null || PlayerController.Instance == null || _dialoguePanel == null)
|
||||
return;
|
||||
|
||||
float distance = Vector3.Distance(_currentAnchor.position, PlayerController.Instance.transform.position);
|
||||
|
||||
float normalizedDistance = Mathf.InverseLerp(_currentAnimationSettings.MinDistance, _currentAnimationSettings.MaxDistance, distance);
|
||||
|
||||
float finalScale = Mathf.Lerp(_currentAnimationSettings.MinScaleMultiplier, _currentAnimationSettings.MaxScaleMultiplier, normalizedDistance);
|
||||
|
||||
_dialoguePanel.transform.localScale = _basePanelScale * finalScale;
|
||||
}
|
||||
|
||||
private Vector3 GetRotationAxisVector(RotationAxis axis)
|
||||
{
|
||||
@@ -331,7 +357,7 @@ namespace Unheimlich.UI
|
||||
/// </summary>
|
||||
private void SortChoicesByDistance()
|
||||
{
|
||||
if (_activeChoices.Count <= 1 || Player.Instance == null)
|
||||
if (_activeChoices.Count <= 1 || PlayerController.Instance == null)
|
||||
return;
|
||||
|
||||
_sortTimer += Time.deltaTime;
|
||||
|
||||
Reference in New Issue
Block a user