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
@@ -42,7 +42,7 @@ namespace Unheimlich.Interactions.FloatingWords
[Tooltip("Maximum width for short texts (1-3 words)")]
[SerializeField] private float _shortTextMaxWidth = 80f;
[Tooltip("Maximum width for medium texts (4-5 words)")]
[SerializeField] private float _mediumTextMaxWidth = 150f;
[SerializeField] private float _mediumTextMaxWidth = 120f;
[Tooltip("Maximum width for long texts (6-10 words)")]
[SerializeField] private float _longTextMaxWidth = 200f;
[Tooltip("Maximum width for very long texts (11+ words)")]
@@ -123,10 +123,6 @@ namespace Unheimlich.Interactions.FloatingWords
ghostColor.a = GetGhostTrailAlpha();
_ghostTextComponent.color = ghostColor;
Canvas ghostCanvas = ghostObj.AddComponent<Canvas>();
ghostCanvas.overrideSorting = true;
ghostCanvas.sortingOrder = -1;
_positionHistory.Clear();
}
}
@@ -266,18 +262,18 @@ namespace Unheimlich.Interactions.FloatingWords
DialogueAnimationSettings settings = GetAnimationSettings();
float textScaleMultiplier = settings != null ? settings.FocusedTextScaleMultiplier : 0.9f;
float textScaleDuration = settings != null ? settings.FocusedTextScaleDuration : 0.3f;
SetTextScale(textScaleMultiplier, textScaleDuration);
SetTextScale(_originalTextScale * textScaleMultiplier, textScaleDuration);
}
transform.localScale = Vector3.one * Mathf.Lerp(_originalScale, MAX_FOCUS_SCALE, progress);
// transform.localScale = Vector3.one * Mathf.Lerp(_originalScale, MAX_FOCUS_SCALE, progress);
bool shouldMoveToPlayer = GetMoveTowardPlayerOnFocus();
if (shouldMoveToPlayer && Player.Instance != null)
if (shouldMoveToPlayer && PlayerController.Instance != null)
{
float distance = GetFocusDistanceFromPlayer();
Vector3 targetPos = Player.Instance.transform.position
+ Player.Instance.transform.forward * distance;
Vector3 targetPos = PlayerController.Instance.transform.position
+ PlayerController.Instance.transform.forward * distance;
transform.position = Vector3.Lerp(transform.position, targetPos, Time.deltaTime * _focusLerpSpeed);
}
@@ -38,6 +38,9 @@ namespace Unheimlich.Interactions.FloatingWords
public float FocusDistanceFromPlayer;
public bool DisableFloatingEffects;
public float DefaultScaleMultiplier;
public bool EnableScaleVariation;
public float MinScaleVariation;
public float MaxScaleVariation;
}
private static SpawnConfig GetConfig(ObjectDescriptionSettings settings)
@@ -96,7 +99,10 @@ namespace Unheimlich.Interactions.FloatingWords
MoveTowardPlayerOnFocus = settings.MoveTowardPlayerOnFocus,
FocusDistanceFromPlayer = settings.FocusDistanceFromPlayer,
DisableFloatingEffects = false,
DefaultScaleMultiplier = settings.DefaultScaleMultiplier
DefaultScaleMultiplier = settings.DefaultScaleMultiplier,
EnableScaleVariation = settings.EnableScaleVariation,
MinScaleVariation = settings.MinScaleVariation,
MaxScaleVariation = settings.MaxScaleVariation
};
}
@@ -144,7 +150,13 @@ namespace Unheimlich.Interactions.FloatingWords
ChoiceFocusHandler word = Object.Instantiate(wordPrefab, parent);
word.transform.localPosition = localOffset;
word.transform.localRotation = Quaternion.identity;
word.transform.localScale = Vector3.one * config.DefaultScaleMultiplier;
float scaleMultiplier = config.DefaultScaleMultiplier;
if (config.EnableScaleVariation)
{
scaleMultiplier *= Random.Range(config.MinScaleVariation, config.MaxScaleVariation);
}
word.transform.localScale = Vector3.one * scaleMultiplier;
CanvasGroup canvasGroup = word.GetComponent<CanvasGroup>();
if (canvasGroup == null)
@@ -170,7 +182,13 @@ namespace Unheimlich.Interactions.FloatingWords
ChoiceFocusHandler word = Object.Instantiate(prefab, parent);
word.transform.localPosition = Vector3.up * i * 50f;
word.transform.localRotation = Quaternion.identity;
word.transform.localScale = Vector3.one * config.DefaultScaleMultiplier;
float scaleMultiplier = config.DefaultScaleMultiplier;
if (config.EnableScaleVariation)
{
scaleMultiplier *= Random.Range(config.MinScaleVariation, config.MaxScaleVariation);
}
word.transform.localScale = Vector3.one * scaleMultiplier;
word.Setup(choices[i], config);
words.Add(word);
}
@@ -180,16 +198,22 @@ namespace Unheimlich.Interactions.FloatingWords
private static List<ChoiceFocusHandler> SpawnInFrontOfPlayer(List<DialogueChoiceData> choices, ChoiceFocusHandler prefab, Transform parent, SpawnConfig config)
{
List<ChoiceFocusHandler> words = new List<ChoiceFocusHandler>();
if (Player.Instance == null) return words;
if (PlayerController.Instance == null) return words;
Vector3 playerForward = Player.Instance.transform.forward;
Vector3 playerForward = PlayerController.Instance.transform.forward;
for (int i = 0; i < choices.Count; i++)
{
ChoiceFocusHandler word = Object.Instantiate(prefab, parent);
Vector3 offset = playerForward * 2f + Vector3.up * (i - choices.Count / 2f) * (config.SpawnRadius / choices.Count / 100f);
word.transform.position = Player.Instance.transform.position + offset;
word.transform.LookAt(Player.Instance.transform);
word.transform.localScale = Vector3.one * config.DefaultScaleMultiplier;
word.transform.position = PlayerController.Instance.transform.position + offset;
word.transform.LookAt(PlayerController.Instance.transform);
float scaleMultiplier = config.DefaultScaleMultiplier;
if (config.EnableScaleVariation)
{
scaleMultiplier *= Random.Range(config.MinScaleVariation, config.MaxScaleVariation);
}
word.transform.localScale = Vector3.one * scaleMultiplier;
word.Setup(choices[i], config);
words.Add(word);
}
@@ -200,9 +224,9 @@ namespace Unheimlich.Interactions.FloatingWords
{
List<ChoiceFocusHandler> words = new List<ChoiceFocusHandler>();
originalPositions = new Vector3[choices.Count];
if (Player.Instance == null) return words;
if (PlayerController.Instance == null) return words;
parent.position = Player.Instance.transform.position;
parent.position = PlayerController.Instance.transform.position;
parent.rotation = Quaternion.identity;
float angleStep = 360f / choices.Count;
@@ -214,8 +238,15 @@ namespace Unheimlich.Interactions.FloatingWords
ChoiceFocusHandler word = Object.Instantiate(prefab, parent);
word.transform.localPosition = localOffset;
word.transform.LookAt(Player.Instance.transform);
word.transform.localScale = Vector3.one * config.DefaultScaleMultiplier;
word.transform.LookAt(PlayerController.Instance.transform);
float scaleMultiplier = config.DefaultScaleMultiplier;
if (config.EnableScaleVariation)
{
scaleMultiplier *= Random.Range(config.MinScaleVariation, config.MaxScaleVariation);
}
word.transform.localScale = Vector3.one * scaleMultiplier;
word.Setup(choices[i], config);
words.Add(word);
}