using BrewMonster.Scripts; using BrewMonster.Scripts.Managers; using CSNetwork.GPDataType; using UnityEngine; namespace BrewMonster.Scripts { /// /// Host player work: Use item /// 主角玩家工作:使用物品 /// 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 / 使用时间计数器 /// /// Constructor / 构造函数 /// 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(); } /// /// Reset work / 重置工作 /// 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(); } /// /// Copy work data / 复制工作数据 /// 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; } /// /// On first tick / 第一帧执行 /// 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}"); } } /// /// Work is cancelled / 工作被取消 /// 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"); } /// /// Set parameters / 设置参数 /// /// Item template ID / 物品模板ID /// Use time in milliseconds / 使用时间(毫秒) /// Target object ID / 目标对象ID /// Is for monster spirit gathering / 是否为命轮采集 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(); } /// /// Tick routine / 每帧更新 /// 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; } /// /// Get item template ID / 获取物品模板ID /// public int GetItem() { return m_idItem; } /// /// Get target object ID / 获取目标对象ID /// public int GetTarget() { return m_idTarget; } /// /// Is this work for monster spirit gathering? / 是否为命轮采集工作 /// public bool IsWorkForMonsterSpirit() { return m_bWorkForMonsterSpirit; } /// /// Get use time counter / 获取使用时间计数器 /// public CECCounter GetTimeCounter() { return m_UseTimeCnt; } } }