126 lines
4.1 KiB
C#
126 lines
4.1 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class WorkerActor : Actor
|
|
{
|
|
WorkerListTableData m_WorkerListTableData;
|
|
DropItem go_finditem;
|
|
float SeekTime = 5f, t;
|
|
Actor m_Owner;
|
|
|
|
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_Owner = owner;
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
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 (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(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())
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
} |