자원 오브젝트가 일꾼에게 자신이 가지고 있는 것 보다 많은 자원을 지급하는 문제 수정
This commit is contained in:
@@ -8,7 +8,8 @@ namespace Northbound
|
||||
Idle = 0,
|
||||
Following = 1,
|
||||
Mining = 2,
|
||||
Returning = 3
|
||||
Returning = 3,
|
||||
WaitingForResource = 4
|
||||
}
|
||||
|
||||
[RequireComponent(typeof(Collider))]
|
||||
@@ -136,6 +137,9 @@ namespace Northbound
|
||||
case WorkerState.Returning:
|
||||
HandleReturning();
|
||||
break;
|
||||
case WorkerState.WaitingForResource:
|
||||
HandleWaitingForResource();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,6 +190,13 @@ namespace Northbound
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_targetResource.HasResourcesAvailable())
|
||||
{
|
||||
SetState(WorkerState.WaitingForResource);
|
||||
PlayIdleAnimation();
|
||||
return;
|
||||
}
|
||||
|
||||
float distance = GetDistanceToCollider(_targetResource.GetComponent<Collider>());
|
||||
|
||||
if (distance > 2f)
|
||||
@@ -225,6 +236,41 @@ namespace Northbound
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleWaitingForResource()
|
||||
{
|
||||
if (_targetResource == null)
|
||||
{
|
||||
SetState(WorkerState.Following);
|
||||
PlayIdleAnimation();
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsBagFull)
|
||||
{
|
||||
SetState(WorkerState.Returning);
|
||||
PlayIdleAnimation();
|
||||
return;
|
||||
}
|
||||
|
||||
if (_targetResource.HasResourcesAvailable())
|
||||
{
|
||||
SetState(WorkerState.Mining);
|
||||
PlayMoveAnimation();
|
||||
return;
|
||||
}
|
||||
|
||||
float distance = GetDistanceToCollider(_targetResource.GetComponent<Collider>());
|
||||
|
||||
if (distance > 3f)
|
||||
{
|
||||
MoveTowards(_targetResource.transform.position);
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayIdleAnimation();
|
||||
}
|
||||
}
|
||||
|
||||
private float GetDistanceToCollider(Collider targetCollider)
|
||||
{
|
||||
if (targetCollider == null)
|
||||
@@ -274,8 +320,8 @@ namespace Northbound
|
||||
|
||||
if (mineAmount > 0)
|
||||
{
|
||||
_targetResource.TakeResourcesForWorker(mineAmount, NetworkObject.NetworkObjectId);
|
||||
_currentBagResources.Value += mineAmount;
|
||||
int actualAmount = _targetResource.TakeResourcesForWorker(mineAmount, NetworkObject.NetworkObjectId);
|
||||
_currentBagResources.Value += actualAmount;
|
||||
_lastMiningTime = Time.time;
|
||||
|
||||
ShowMiningEffectClientRpc();
|
||||
@@ -303,6 +349,10 @@ namespace Northbound
|
||||
{
|
||||
SetState(WorkerState.Mining);
|
||||
}
|
||||
else if (_targetResource != null)
|
||||
{
|
||||
SetState(WorkerState.WaitingForResource);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetState(WorkerState.Following);
|
||||
@@ -427,6 +477,7 @@ namespace Northbound
|
||||
WorkerState.Following => "따라가는 중",
|
||||
WorkerState.Mining => "채굴 중",
|
||||
WorkerState.Returning => "반환 중",
|
||||
WorkerState.WaitingForResource => "자원 대기 중",
|
||||
_ => "대기 중"
|
||||
};
|
||||
return $"워커 (가방: {_currentBagResources.Value}/{maxBagCapacity}) - {stateText}";
|
||||
@@ -507,6 +558,9 @@ namespace Northbound
|
||||
case WorkerState.Returning:
|
||||
PlayMoveAnimation();
|
||||
break;
|
||||
case WorkerState.WaitingForResource:
|
||||
PlayIdleAnimation();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -642,6 +696,12 @@ namespace Northbound
|
||||
Gizmos.DrawLine(transform.position, _targetResource.transform.position);
|
||||
}
|
||||
|
||||
if (_currentState.Value == WorkerState.WaitingForResource && _targetResource != null)
|
||||
{
|
||||
Gizmos.color = Color.blue;
|
||||
Gizmos.DrawLine(transform.position, _targetResource.transform.position);
|
||||
}
|
||||
|
||||
if (_currentState.Value == WorkerState.Returning && _core != null)
|
||||
{
|
||||
Gizmos.color = Color.green;
|
||||
|
||||
Reference in New Issue
Block a user