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