using System.Collections; using System.Collections.Generic; using UnityEngine; public class FairyActor : Actor { EquipmentTableBase m_FairyTableData; DropItem go_finditem; float SeekTime = 5f, t; byte Status = 0; // 0 아이들, 1 캐릭터 뒤로 이동 중, 2 아이템으로 이동 중 protected override void Awake() { base.Awake(); m_Stat = new ActorStatInfo(eRole.Fairy, ServerInfo.Ins.m_ServerData, null); } 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_FairyTableData = table_fairy.Ins.Get_Data(_id); if (!_ui) { int lv = sdata.Get_SmeltingLv(_id); m_NavMeshAgent.speed = m_NavSpeed = 6f; // TODO 정인호 : 요정은 날개로 변경될 예정 m_FairyTableData.Get_StatValue(eStat.FairyMoveSpeed, lv); t = SeekTime = 2f; //m_FairyTableData.Get_StatValue(eStat.FairySeek, lv); Set_Warp(Get_Pos()); if (!m_NavMeshAgent.isOnNavMesh) Set_Warp(Get_Pos()); Status = 0; } } Vector3 Get_Pos() { return DSUtil.Get_RandomPos_onNavMesh(MyValue.MyPC.Get_position(), 0f, 1f); } protected override void Update() { t -= Time.deltaTime; switch (Status) { case 0: // 대기 중 if (DSUtil.CheckNull(go_finditem) || !go_finditem.gameObject.activeInHierarchy) go_finditem = DropItemInfo.Ins.Get_NearestDropItem(Get_position()); if (t > 0f) { if (go_finditem) { // 다음 아이템으로 미리 가서 대기 Play_Run(); Set_Path(go_finditem.transform.position); Status = 3; } } else { if (go_finditem && Set_Path(go_finditem.transform.position)) { Play_Run(); Status = 2; } } if (Status == 0 && Vector3.Distance(MyValue.MyPC.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()) { Play_Idle(); Status = 0; t = SeekTime; } } else if (Complete_Destination()) { if (!DSUtil.CheckNull(go_finditem)) { if (go_finditem.gameObject.activeInHierarchy) { Play_Attack(Random.Range(0, 2), 1f); if (go_finditem.ItemTouch(this)) ServerInfo.Ins.m_ServerData.Add_TitleCondition(46, 47); // 칭호 : 요정은 내 친구, 요정은 내 노예 } else { Play_Idle(); Status = 0; t = SeekTime; } go_finditem = null; } else { Play_Idle(); Status = 0; t = SeekTime; } } break; case 3: // 아무것도 안함 if (CurAnim != eAnim.Idle && Complete_Destination()) Play_Idle(); if (t <= 0f) Status = 0; break; } } }