Mini demo with all features

This commit is contained in:
2026-02-23 14:10:46 +01:00
parent 5b1bdaeb90
commit d9326e48cc
176 changed files with 32668 additions and 564 deletions
+36 -10
View File
@@ -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;