124 lines
4.2 KiB
C#
124 lines
4.2 KiB
C#
using UnityEngine;
|
|
|
|
namespace Unheimlich.Features.Dialogue.Data
|
|
{
|
|
[CreateAssetMenu(fileName = "NewObjectDescriptionSettings", menuName = "Unheimlich/Animation/Object Description Settings")]
|
|
public class ObjectDescriptionSettings : ScriptableObject
|
|
{
|
|
[Header("Spawn Settings")]
|
|
[Tooltip("Spawn mode for floating words")]
|
|
public ChoiceSpawnMode SpawnMode = ChoiceSpawnMode.AroundAnchor;
|
|
|
|
[Tooltip("Number of floating words to spawn around the object")]
|
|
[Range(1, 10)]
|
|
public int WordCount = 3;
|
|
|
|
[Tooltip("Radius around anchor where words spawn")]
|
|
public float SpawnRadius = 1.5f;
|
|
|
|
[Tooltip("Height offset from anchor")]
|
|
public float SpawnHeightOffset = 0f;
|
|
|
|
[Tooltip("Forward offset from anchor (to avoid clipping with object)")]
|
|
public float ForwardOffset = 0.5f;
|
|
|
|
[Tooltip("Tilt angle in degrees (rotation around Right axis for height adjustment)")]
|
|
[Range(-90f, 90f)]
|
|
public float TiltAngle = 0f;
|
|
|
|
[Tooltip("Should words face the player?")]
|
|
public bool FacePlayer = true;
|
|
|
|
[Tooltip("Duration of spawn animation")]
|
|
public float SpawnAnimationDuration = 1f;
|
|
|
|
[Tooltip("Spawn animation curve")]
|
|
public AnimationCurve SpawnCurve = AnimationCurve.EaseInOut(0, 0, 1, 1);
|
|
|
|
[Header("Idle Behavior")]
|
|
[Tooltip("Should words float vertically?")]
|
|
public bool EnableFloating = true;
|
|
|
|
[Tooltip("Floating amplitude")]
|
|
public float FloatingAmplitude = 0.2f;
|
|
|
|
[Tooltip("Floating duration (full cycle)")]
|
|
public float FloatingDuration = 3f;
|
|
|
|
[Tooltip("Enable organic shake/drift movement around center point")]
|
|
public bool EnableOrganicShake = true;
|
|
|
|
[Tooltip("Radius around center point where words can drift")]
|
|
public float ShakeRadius = 0.15f;
|
|
|
|
[Tooltip("Speed of the shake movement")]
|
|
public float ShakeSpeed = 1.5f;
|
|
|
|
[Tooltip("Smoothness of shake transitions (higher = smoother)")]
|
|
public float ShakeSmoothness = 2f;
|
|
|
|
[Header("Ghost Trail Effect")]
|
|
[Tooltip("Enable ghost/shadow trail effect behind text")]
|
|
public bool EnableGhostTrail = false;
|
|
|
|
[Tooltip("Time delay for ghost trail in seconds")]
|
|
public float GhostTrailDelay = 0.4f;
|
|
|
|
[Tooltip("Transparency of the ghost trail (0 = invisible, 1 = opaque)")]
|
|
[Range(0f, 1f)]
|
|
public float GhostTrailAlpha = 0.5f;
|
|
|
|
[Header("Rotation")]
|
|
[Tooltip("Should container rotate continuously?")]
|
|
public bool EnableRotation = true;
|
|
|
|
[Tooltip("Axis of rotation")]
|
|
public RotationAxis RotationAxis = RotationAxis.Up;
|
|
|
|
[Tooltip("Rotation speed (in seconds for a full rotation)")]
|
|
public float RotationSpeed = 10f;
|
|
|
|
[Header("Convergence Behavior")]
|
|
[Tooltip("Minimum radius when cursor is on object (words converge here)")]
|
|
public float MinConvergenceRadius = 0.1f;
|
|
|
|
[Tooltip("Speed at which words converge to center")]
|
|
public float ConvergenceSpeed = 5f;
|
|
|
|
[Tooltip("Duration of the merge animation when words fuse together")]
|
|
public float MergeDuration = 0.3f;
|
|
|
|
[Tooltip("Scale multiplier during merge animation")]
|
|
public float MergeScalePulse = 1.2f;
|
|
|
|
[Tooltip("If true, merge only happens once and words stay merged. If false, words can merge/unmerge repeatedly.")]
|
|
public bool MergeOnce = false;
|
|
|
|
[Tooltip("Duration in seconds the merged word stays visible before disappearing (only used if mergeOnce is true)")]
|
|
public float MergeOnceDisplayDuration = 3f;
|
|
|
|
[Header("Player Distance")]
|
|
[Tooltip("Distance from object at which words appear")]
|
|
public float ActivationDistance = 5f;
|
|
|
|
[Tooltip("Distance beyond which words disappear")]
|
|
public float DeactivationDistance = 7f;
|
|
|
|
[Header("Visual Settings")]
|
|
[Tooltip("Enable distance-based scaling")]
|
|
public bool EnableDistanceScaling = true;
|
|
|
|
[Tooltip("Minimum distance for scaling calculation")]
|
|
public float MinDistance = 2f;
|
|
|
|
[Tooltip("Maximum distance for scaling calculation")]
|
|
public float MaxDistance = 10f;
|
|
|
|
[Tooltip("Scale multiplier at minimum distance")]
|
|
public float MinScaleMultiplier = 1f;
|
|
|
|
[Tooltip("Scale multiplier at maximum distance")]
|
|
public float MaxScaleMultiplier = 2.5f;
|
|
}
|
|
}
|