146 lines
4.2 KiB
C#
146 lines
4.2 KiB
C#
using CSNetwork.GPDataType;
|
|
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);
|
|
BMLogger.LogError($" m_OverTimeCnt m_dwCounter:{m_OverTimeCnt.m_dwCounter}, m_dwPeriod:{m_OverTimeCnt.m_dwPeriod} ");
|
|
if (m_OverTimeCnt.IncCounter(dwDeltaTime * 1000))
|
|
{
|
|
BMLogger.LogError($" m_OverTimeCnt finished ");
|
|
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 override 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;
|
|
}
|
|
}
|
|
}
|