Files
test/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkUse.cs
2026-02-26 15:57:36 +07:00

189 lines
5.9 KiB
C#

using BrewMonster.Scripts;
using BrewMonster.Scripts.Managers;
using CSNetwork.GPDataType;
using UnityEngine;
namespace BrewMonster.Scripts
{
/// <summary>
/// Host player work: Use item
/// 主角玩家工作:使用物品
/// </summary>
public class CECHPWorkUse : CECHPWork
{
// Fields / 字段
private int m_idItem; // Item template ID / 物品模板ID
private int m_idTarget; // Target object ID / 目标对象ID
private bool m_bWorkForMonsterSpirit; // Is this work for monster spirit gathering? / 是否为命轮采集工作
private CECCounter m_UseTimeCnt; // Use time counter / 使用时间计数器
/// <summary>
/// Constructor / 构造函数
/// </summary>
public CECHPWorkUse(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_USEITEM, pWorkMan)
{
m_dwMask = Work_mask.MASK_USEITEM;
m_dwTransMask = Work_mask.MASK_STAND | Work_mask.MASK_MOVETOPOS;
Reset();
}
/// <summary>
/// Reset work / 重置工作
/// </summary>
public override void Reset()
{
base.Reset();
m_idItem = 0;
m_idTarget = 0;
m_bWorkForMonsterSpirit = false;
if (m_UseTimeCnt == null)
m_UseTimeCnt = new CECCounter();
m_UseTimeCnt.SetPeriod(100);
m_UseTimeCnt.Reset();
}
/// <summary>
/// Copy work data / 复制工作数据
/// </summary>
public override bool CopyData(CECHPWork pWork)
{
if (!base.CopyData(pWork))
return false;
CECHPWorkUse pSrc = pWork as CECHPWorkUse;
if (pSrc == null)
return false;
m_idItem = pSrc.m_idItem;
m_idTarget = pSrc.m_idTarget;
m_bWorkForMonsterSpirit = pSrc.m_bWorkForMonsterSpirit;
m_UseTimeCnt.SetPeriod(pSrc.m_UseTimeCnt.GetPeriod());
m_UseTimeCnt.SetCounter(pSrc.m_UseTimeCnt.GetCounter());
return true;
}
/// <summary>
/// On first tick / 第一帧执行
/// </summary>
protected override void OnFirstTick()
{
if (m_pHost == null)
return;
m_pHost.m_iMoveMode = (int)MoveMode.MOVE_STAND;
EC_IvtrItem pItem = EC_IvtrItem.CreateItem(m_idItem, 0, 1);
if (pItem == null)
return;
if (m_bWorkForMonsterSpirit)
{
// Play gather monster spirit action / 播放采集命轮动作
// TODO: Implement PlayGatherMonsterSpiritAction if needed
// m_pHost.PlayGatherMonsterSpiritAction();
Debug.Log($"[CECHPWorkUse] Playing gather monster spirit action for item {m_idItem}");
}
else
{
// Play start use item action / 播放开始使用物品动作
// TODO: Implement PlayStartUseItemAction if needed
// m_pHost.PlayStartUseItemAction(m_idItem);
Debug.Log($"[CECHPWorkUse] Playing start use item action for item {m_idItem}");
}
}
/// <summary>
/// Work is cancelled / 工作被取消
/// </summary>
public override void Cancel()
{
if (m_idTarget != 0 && m_pHost != null)
{
m_pHost.TurnFaceTo(0);
}
base.Cancel();
// TODO: Implement AP_ActionEvent if needed
// AP_ActionEvent(AP_EVENT_STOPUSEITEM);
Debug.Log("[CECHPWorkUse] Work cancelled - STOPUSEITEM event");
}
/// <summary>
/// Set parameters / 设置参数
/// </summary>
/// <param name="idItem">Item template ID / 物品模板ID</param>
/// <param name="dwUseTime">Use time in milliseconds / 使用时间(毫秒)</param>
/// <param name="idTarget">Target object ID / 目标对象ID</param>
/// <param name="bWorkForMonsterSpirit">Is for monster spirit gathering / 是否为命轮采集</param>
public void SetParams(int idItem, float dwUseTime, int idTarget, bool bWorkForMonsterSpirit)
{
m_idItem = idItem;
m_idTarget = idTarget;
m_bWorkForMonsterSpirit = bWorkForMonsterSpirit;
m_UseTimeCnt.SetPeriod(dwUseTime);
m_UseTimeCnt.Reset();
}
/// <summary>
/// Tick routine / 每帧更新
/// </summary>
public override bool Tick(float dwDeltaTime)
{
base.Tick(dwDeltaTime);
// Update use time counter / 更新使用时间计数器
if (m_UseTimeCnt.IncCounter(dwDeltaTime))
{
m_UseTimeCnt.Reset(true);
m_bFinished = true;
}
// Turn face to target if needed / 如果有目标则面向目标
if (m_idTarget != 0 && m_pHost != null)
{
m_pHost.TurnFaceTo(m_idTarget);
}
return true;
}
/// <summary>
/// Get item template ID / 获取物品模板ID
/// </summary>
public int GetItem()
{
return m_idItem;
}
/// <summary>
/// Get target object ID / 获取目标对象ID
/// </summary>
public int GetTarget()
{
return m_idTarget;
}
/// <summary>
/// Is this work for monster spirit gathering? / 是否为命轮采集工作
/// </summary>
public bool IsWorkForMonsterSpirit()
{
return m_bWorkForMonsterSpirit;
}
/// <summary>
/// Get use time counter / 获取使用时间计数器
/// </summary>
public CECCounter GetTimeCounter()
{
return m_UseTimeCnt;
}
}
}