Project_WL/Assets/Script/Character/WorkerActor.cs

126 lines
4.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WorkerActor : 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;
}
}
}