using System.Collections; using System.Collections.Generic; using UnityEngine; public class Stats : MonoBehaviour { [Header("--- 기본 능력치 ---")] [SerializeField] private float baseMaxHealth = 100f; [SerializeField] private float baseMoveSpeed = 5f; [SerializeField] private float baseStrength = 10f; [SerializeField] private float baseAttackDamage = 10f; /* ========================= * 보너스 능력치 (카드 / 레벨업) * ========================= */ [Header("--- 보너스 능력치 ---")] public float bonusMaxHealth; public float bonusMoveSpeed; public float bonusStrength; public float bonusAttackDamage; /* ========================= * 밸런스 설정 * ========================= */ [Header("--- 밸런스 설정 (인스펙터) ---")] [Tooltip("무게 1당 줄어드는 이동 속도")] [SerializeField] private float weightToSpeedPenalty = 0.1f; [SerializeField] private float runSpeedMultiplier = 1.5f; private float _weightPenalty = 0f; /* ========================= * 최종 능력치 (읽기 전용 / 인스펙터 표시용) * ========================= */ [Header("--- 최종 능력치 (Read Only) ---")] [SerializeField] private float finalMaxHealth; [SerializeField] private float finalMoveSpeed; [SerializeField] private float finalStrength; [SerializeField] private float finalAttackDamage; private void Update() { // ⭐ 인스펙터 표시용 계산 finalMaxHealth = MaxHealth; finalMoveSpeed = CurrentMoveSpeed; finalStrength = Strength; finalAttackDamage = BaseAttackDamage; } /* ========================= * 실제 게임 로직용 프로퍼티 * ========================= */ public float MaxHealth => baseMaxHealth + bonusMaxHealth; public float Strength => baseStrength + bonusStrength; public float BaseAttackDamage => baseAttackDamage + bonusAttackDamage; public float CurrentMoveSpeed => Mathf.Max(1f, baseMoveSpeed + bonusMoveSpeed - _weightPenalty); public float CurrentRunSpeed => CurrentMoveSpeed * runSpeedMultiplier; /* ========================= * 외부에서 호출 * ========================= */ public void AddMaxHealth(float value) => bonusMaxHealth += value; public void AddMoveSpeed(float value) => bonusMoveSpeed += value; public void AddStrength(float value) => bonusStrength += value; public void AddAttackDamage(float value) => bonusAttackDamage += value; public void UpdateWeaponWeight(float requiredStrength) => _weightPenalty = requiredStrength * weightToSpeedPenalty; public void ResetWeight() => _weightPenalty = 0f; }