Projext/Assets/5.TestScript/Stats.cs

75 lines
2.7 KiB
C#
Raw Normal View History

2026-01-29 06:58:38 +00:00
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;
}