Files
test/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs
T
2026-02-05 11:21:49 +07:00

145 lines
4.0 KiB
C#

using CSNetwork.GPDataType;
using Unity.VisualScripting;
using UnityEngine;
using static BrewMonster.Scripts.CECHPWorkSpell.Spell_magic_state;
namespace BrewMonster.Scripts
{
///////////////////////////////////////////////////////////////////////////
//
// Class CECHPWorkSpell
//
///////////////////////////////////////////////////////////////////////////
public class CECHPWorkSpell : CECHPWork
{
public static class Spell_magic_state
{
public const int ST_INCANT = 0,
ST_SPELL = 1;
}
public CECHPWorkSpell(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_SPELLOBJECT, pWorkMan)
{
m_OverTimeCnt = new CECCounter();
m_dwMask = Work_mask.MASK_SPELLOBJECT;
m_dwTransMask = Work_mask.MASK_STAND | Work_mask.MASK_MOVETOPOS | Work_mask.MASK_TRACEOBJECT;
Reset();
}
public CECHPWorkSpell(int iWorkID, CECHPWorkMan pWorkMan) : base(iWorkID, pWorkMan)
{
}
protected CECSkill m_pSkill; // Skill object
protected CECCounter m_OverTimeCnt; // Over time counter
protected int m_iState;
protected int m_idTarget; // Target id
// Prepare cast
public void PrepareCast(int idTarget, CECSkill pSkill, int iIncantTime)
{
m_pSkill = pSkill;
m_iState = ST_INCANT;
m_idTarget = idTarget;
if (iIncantTime < 0)
iIncantTime = 0x7fffffff;
else
iIncantTime *= 2;
m_OverTimeCnt.SetPeriod(iIncantTime);
m_OverTimeCnt.Reset();
}
// Change state
public void ChangeState(int iState)
{
m_iState = iState;
}
// Get state
public int GetState()
{
return m_iState;
}
public CECSkill GetSkill()
{
return m_pSkill;
}
// Tick routine
public override bool Tick(float dwDeltaTime)
{
base.Tick(dwDeltaTime * 1000);
if (m_OverTimeCnt.IncCounter(dwDeltaTime * 1000))
m_bFinished = true;
if (m_idTarget != 0)
{
m_pHost.TurnFaceTo(m_idTarget);
}
if (!m_pHost.IsPlayingAction())
{
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_FIGHTSTAND);
}
return true;
}
protected override void OnFirstTick()
{
m_pHost.m_iMoveMode = (int)MoveMode.MOVE_STAND;
}
public override void Reset()
{
base.Reset();
m_OverTimeCnt.Reset();
m_pSkill = null;
m_iState = ST_INCANT;
m_idTarget = 0;
}
// Copy work data
public virtual bool CopyData(CECHPWork pWork)
{
return false;
}
// Cancel work
public virtual void Cancel()
{
m_pHost.TurnFaceTo(0);
base.Cancel();
}
}
///////////////////////////////////////////////////////////////////////////
//
// Class CECHPWorkSpellMatcher
//
///////////////////////////////////////////////////////////////////////////
// 根据技能 ID 匹配 CECHPWorkSpell
// Match CECHPWorkSpell based on skill ID
public class CECHPWorkSpellMatcher : CECHPWorkMatcher
{
private CECSkill m_pSkill;
public CECHPWorkSpellMatcher(CECSkill pSkill)
{
m_pSkill = pSkill;
}
public bool Match(CECHPWork pWork, int priority, bool isDelayWork)
{
bool bMatching = false;
if (pWork != null && pWork.GetWorkID() == CECHPWork.Host_work_ID.WORK_SPELLOBJECT)
{
CECHPWorkSpell pWorkSpell = pWork as CECHPWorkSpell;
if (pWorkSpell != null && m_pSkill == pWorkSpell.GetSkill())
{
bMatching = true;
}
}
return bMatching;
}
}
}