2025-03-07 02:28:25 +00:00
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
public class WorkerActor : Actor
|
|
|
|
|
{
|
2025-03-07 04:53:50 +00:00
|
|
|
WorkerListTableData m_WorkerListTableData;
|
2025-03-07 23:45:34 +00:00
|
|
|
DropItem _finditem;
|
|
|
|
|
DropItem go_finditem
|
|
|
|
|
{
|
|
|
|
|
get { return _finditem; }
|
|
|
|
|
set { _finditem = value; isFinditem = _finditem; }
|
|
|
|
|
}
|
|
|
|
|
bool isFinditem;
|
2025-03-07 02:28:25 +00:00
|
|
|
float SeekTime = 5f, t;
|
2025-03-07 04:53:50 +00:00
|
|
|
Actor m_Owner;
|
2025-03-07 06:50:46 +00:00
|
|
|
bool isOwner;
|
2025-03-07 02:28:25 +00:00
|
|
|
|
|
|
|
|
byte Status = 0; // 0 아이들, 1 캐릭터 뒤로 이동 중, 2 아이템으로 이동 중
|
|
|
|
|
|
|
|
|
|
public override void Set(bool isEnemy, Actor owner, ServerData sdata, int _id, bool _stop, bool _ui = false)
|
|
|
|
|
{
|
|
|
|
|
base.Set(isEnemy, owner, sdata, _id, _stop);
|
2025-03-07 06:50:46 +00:00
|
|
|
m_Role = eRole.Worker;
|
2025-03-07 04:53:50 +00:00
|
|
|
m_Owner = owner;
|
2025-03-07 06:50:46 +00:00
|
|
|
isOwner = m_Owner;
|
2025-03-07 23:45:34 +00:00
|
|
|
m_Stat = new ActorStatInfo(m_Role, sdata, null);
|
2025-03-07 02:28:25 +00:00
|
|
|
|
2025-03-07 04:53:50 +00:00
|
|
|
m_WorkerListTableData = table_worker.Ins.Get_Data_orNull(_id);
|
2025-03-07 02:28:25 +00:00
|
|
|
if (!_ui)
|
|
|
|
|
{
|
2025-03-07 04:53:50 +00:00
|
|
|
int lv = 1; // TODO 정인호 : 일꾼 레벨
|
|
|
|
|
m_NavMeshAgent.speed = m_NavSpeed = m_WorkerListTableData.f_MoveSpeed;
|
|
|
|
|
t = SeekTime = m_WorkerListTableData.f_SeekTimeDelay;
|
2025-03-07 02:28:25 +00:00
|
|
|
Set_Warp(Get_Pos());
|
|
|
|
|
Status = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-07 06:50:46 +00:00
|
|
|
public override void On_Regen(bool reincarnation = false, float healrate = 1)
|
|
|
|
|
{
|
2025-03-07 23:45:34 +00:00
|
|
|
Status = 0;
|
2025-03-07 06:50:46 +00:00
|
|
|
Set_Warp(Get_Pos());
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-07 02:28:25 +00:00
|
|
|
Vector3 Get_Pos()
|
|
|
|
|
{
|
2025-03-07 04:53:50 +00:00
|
|
|
return DSUtil.Get_RandomPos_onNavMesh(m_Owner.Get_position(), 0f, 1f);
|
2025-03-07 02:28:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void Update()
|
|
|
|
|
{
|
|
|
|
|
t -= Time.deltaTime;
|
|
|
|
|
switch (Status)
|
|
|
|
|
{
|
|
|
|
|
case 0: // 대기 중
|
2025-03-07 23:45:34 +00:00
|
|
|
if (!isFinditem || !go_finditem.gameObject.activeInHierarchy)
|
2025-03-07 02:28:25 +00:00
|
|
|
go_finditem = DropItemInfo.Ins.Get_NearestDropItem(Get_position());
|
|
|
|
|
|
2025-03-07 23:45:34 +00:00
|
|
|
if (t <= 0f && go_finditem && Set_Path(go_finditem.transform.position))
|
2025-03-07 02:28:25 +00:00
|
|
|
{
|
2025-03-07 23:45:34 +00:00
|
|
|
Play_Run();
|
|
|
|
|
Status = 2;
|
2025-03-07 02:28:25 +00:00
|
|
|
}
|
|
|
|
|
|
2025-03-07 23:45:34 +00:00
|
|
|
if (!isFinditem && Status == 0 && isOwner && Vector3.Distance(m_Owner.Get_position(), Get_position()) > 3f)
|
|
|
|
|
{ // 아이템이 없으므로 캐릭터 근처로 옴
|
2025-03-07 02:28:25 +00:00
|
|
|
Play_Run();
|
|
|
|
|
Set_Path(Get_Pos());
|
|
|
|
|
Status = 1;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 1: // 캐릭터 뒤로 가는 중
|
|
|
|
|
if (Complete_Destination())
|
|
|
|
|
{
|
|
|
|
|
Play_Idle();
|
|
|
|
|
Status = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 2: // 아이템으로 뛰어가는 중
|
|
|
|
|
if (CurAnim >= eAnim.Attack)
|
|
|
|
|
{
|
|
|
|
|
if (!isPlaying())
|
2025-03-07 23:45:34 +00:00
|
|
|
End_Run();
|
2025-03-07 02:28:25 +00:00
|
|
|
}
|
|
|
|
|
else if (Complete_Destination())
|
2025-03-07 23:45:34 +00:00
|
|
|
End_Run();
|
2025-03-07 02:28:25 +00:00
|
|
|
break;
|
|
|
|
|
case 3: // 아무것도 안함
|
|
|
|
|
if (CurAnim != eAnim.Idle && Complete_Destination())
|
|
|
|
|
Play_Idle();
|
|
|
|
|
if (t <= 0f)
|
|
|
|
|
Status = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-03-07 23:45:34 +00:00
|
|
|
|
|
|
|
|
void End_Run()
|
|
|
|
|
{
|
|
|
|
|
Play_Idle();
|
|
|
|
|
Status = 0;
|
|
|
|
|
t = SeekTime;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnTriggerEnter(Collider other)
|
|
|
|
|
{
|
|
|
|
|
var dropitem = other.GetComponent<DropItem>();
|
|
|
|
|
if (dropitem)
|
|
|
|
|
{
|
|
|
|
|
dropitem.ItemTouch(this);
|
|
|
|
|
if (go_finditem == dropitem)
|
|
|
|
|
go_finditem = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-03-07 02:28:25 +00:00
|
|
|
}
|