자원 생성기 제작 및 맵 생성기에 통합
및 씬 내 오브젝트 구조 정리
This commit is contained in:
@@ -19,6 +19,24 @@ namespace Northbound
|
||||
public float rechargeInterval = 5f; // 충전 주기 (초)
|
||||
public int rechargeAmount = 10; // 주기당 충전량
|
||||
|
||||
[Header("Quality (Runtime)")]
|
||||
[SerializeField] private NetworkVariable<float> _qualityPercentage = new NetworkVariable<float>(
|
||||
0f,
|
||||
NetworkVariableReadPermission.Everyone,
|
||||
NetworkVariableWritePermission.Server
|
||||
);
|
||||
|
||||
[Tooltip("품질 보정율 (-30% ~ +30%)")]
|
||||
[SerializeField] private float _displayQuality = 0f;
|
||||
|
||||
[Tooltip("품질 적용 후 최대 자원량")]
|
||||
[SerializeField] private int _displayMaxResources = 100;
|
||||
|
||||
[Tooltip("품질 적용 후 충전량")]
|
||||
[SerializeField] private int _displayRechargeAmount = 10;
|
||||
|
||||
private bool _isQualityInitialized = false;
|
||||
|
||||
[Header("Animation")]
|
||||
public string interactionAnimationTrigger = "Mining"; // 플레이어 애니메이션 트리거
|
||||
|
||||
@@ -107,13 +125,83 @@ namespace Northbound
|
||||
private float _lastGatheringTime;
|
||||
private float _lastRechargeTime;
|
||||
|
||||
public float QualityPercentage => _qualityPercentage.Value;
|
||||
|
||||
public int ActualMaxResources
|
||||
{
|
||||
get
|
||||
{
|
||||
float multiplier = 1f + (_qualityPercentage.Value / 100f);
|
||||
return Mathf.RoundToInt(maxResources * multiplier);
|
||||
}
|
||||
}
|
||||
|
||||
public int ActualRechargeAmount
|
||||
{
|
||||
get
|
||||
{
|
||||
float multiplier = 1f + (_qualityPercentage.Value / 100f);
|
||||
return Mathf.RoundToInt(rechargeAmount * multiplier);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
_qualityPercentage.OnValueChanged += OnQualityChanged;
|
||||
|
||||
if (IsServer)
|
||||
{
|
||||
if (!_isQualityInitialized)
|
||||
{
|
||||
_qualityPercentage.Value = Random.Range(-30f, 30f);
|
||||
}
|
||||
|
||||
_currentResources.Value = ActualMaxResources;
|
||||
_lastRechargeTime = Time.time;
|
||||
_lastGatheringTime = Time.time - gatheringCooldown;
|
||||
}
|
||||
|
||||
_displayQuality = _qualityPercentage.Value;
|
||||
UpdateDisplayValues();
|
||||
}
|
||||
|
||||
public void InitializeQuality(float qualityPercentage)
|
||||
{
|
||||
if (IsServer)
|
||||
{
|
||||
_currentResources.Value = maxResources;
|
||||
_lastRechargeTime = Time.time;
|
||||
_lastGatheringTime = Time.time - gatheringCooldown;
|
||||
_qualityPercentage.Value = qualityPercentage;
|
||||
_displayQuality = qualityPercentage;
|
||||
_isQualityInitialized = true;
|
||||
}
|
||||
else if (IsClient)
|
||||
{
|
||||
_displayQuality = qualityPercentage;
|
||||
UpdateDisplayValues();
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnNetworkDespawn()
|
||||
{
|
||||
_qualityPercentage.OnValueChanged -= OnQualityChanged;
|
||||
}
|
||||
|
||||
private void OnQualityChanged(float previous, float current)
|
||||
{
|
||||
_displayQuality = current;
|
||||
UpdateDisplayValues();
|
||||
}
|
||||
|
||||
private void UpdateDisplayValues()
|
||||
{
|
||||
if (IsClient || IsServer)
|
||||
{
|
||||
_displayMaxResources = ActualMaxResources;
|
||||
_displayRechargeAmount = ActualRechargeAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
_displayMaxResources = maxResources;
|
||||
_displayRechargeAmount = rechargeAmount;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,12 +213,12 @@ namespace Northbound
|
||||
// 자원 충전 로직
|
||||
if (Time.time - _lastRechargeTime >= rechargeInterval)
|
||||
{
|
||||
if (_currentResources.Value < maxResources)
|
||||
if (_currentResources.Value < ActualMaxResources)
|
||||
{
|
||||
int rechargeAmountToAdd = Mathf.Min(rechargeAmount, maxResources - _currentResources.Value);
|
||||
int rechargeAmountToAdd = Mathf.Min(ActualRechargeAmount, ActualMaxResources - _currentResources.Value);
|
||||
_currentResources.Value += rechargeAmountToAdd;
|
||||
|
||||
// Debug.Log($"{resourceName} {rechargeAmountToAdd} 충전됨. 현재: {_currentResources.Value}/{maxResources}");
|
||||
// Debug.Log($"{resourceName} {rechargeAmountToAdd} 충전됨. 현재: {_currentResources.Value}/{ActualMaxResources}");
|
||||
}
|
||||
|
||||
_lastRechargeTime = Time.time;
|
||||
@@ -266,7 +354,7 @@ namespace Northbound
|
||||
if (_currentResources.Value <= 0)
|
||||
return "자원 충전 중...";
|
||||
|
||||
return $"[E] {resourceName} 채집 ({_currentResources.Value}/{maxResources})";
|
||||
return $"[E] {resourceName} 채집 ({_currentResources.Value}/{ActualMaxResources})";
|
||||
}
|
||||
|
||||
public string GetInteractionAnimation()
|
||||
|
||||
Reference in New Issue
Block a user