fix: update normal attack.
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
using System.Security.Cryptography;
|
||||
using Unity.VisualScripting;
|
||||
using WorkList = System.Collections.Generic.List<CECHPWork>;
|
||||
|
||||
public class CECHPWork : CECObjectWork
|
||||
@@ -483,6 +485,117 @@ public class CECHPWorkMan
|
||||
public bool StartWork_p1(CECHPWork pWork, bool bNoDelay = false) { return StartWork(Work_priority.PRIORITY_1, pWork, bNoDelay); }
|
||||
public bool StartWork_p2(CECHPWork pWork, bool bNoDelay = false) { return StartWork(Work_priority.PRIORITY_2, pWork, bNoDelay); }
|
||||
public CECHostPlayer GetHostPlayer() { return m_pHost; }
|
||||
|
||||
public CECHPWork CreateWork(int idWork)
|
||||
{
|
||||
CECHPWork pWork = null;
|
||||
|
||||
switch (idWork)
|
||||
{
|
||||
//case CECHPWork.Host_work_ID.WORK_STAND: pWork = new CECHPWorkStand(this); break;
|
||||
case CECHPWork.Host_work_ID.WORK_MOVETOPOS: pWork = new CECHPWorkMove(this); break;
|
||||
case CECHPWork.Host_work_ID.WORK_TRACEOBJECT: pWork = new CECHPWorkTrace(this); break;
|
||||
case CECHPWork.Host_work_ID.WORK_HACKOBJECT: pWork = new CECHPWorkMelee(this); break;
|
||||
case CECHPWork.Host_work_ID.WORK_SPELLOBJECT: pWork = new CECHPWorkSpell(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_USEITEM: pWork = new CECHPWorkUse(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_DEAD: pWork = new CECHPWorkDead(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_FOLLOW: pWork = new CECHPWorkFollow(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_FLYOFF: pWork = new CECHPWorkFly(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_FREEFALL: pWork = new CECHPWorkFall(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_SIT: pWork = new CECHPWorkSit(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_PICKUP: pWork = new CECHPWorkPick(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_CONCENTRATE: pWork = new CECHPWorkConcentrate(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_REVIVE: pWork = new CECHPWorkRevive(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_FLASHMOVE: pWork = new CECHPWorkFMove(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_BEBOUND: pWork = new CECHPWorkBeBound(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_PASSIVEMOVE: pWork = new CECHPWorkPassiveMove(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_CONGREGATE: pWork = new CECHPWorkCongregate(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_SKILLSTATEACT: pWork = new CECHPWorkSkillStateAction(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_FORCENAVIGATEMOVE: pWork = new CECHPWorkNavigate(this); break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
return pWork;
|
||||
}
|
||||
|
||||
public bool CanStartWork(int iWorkID, int iPriority = CECHPWorkMan.Work_priority.PRIORITY_1)
|
||||
{
|
||||
if (!ValidatePriority(iPriority))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (GetWork(iWorkID) != null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!HasWorkOnPriority(iPriority))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
WorkList workList = m_WorkStack[iPriority];
|
||||
for (int i = 0; i < workList.Count; ++i)
|
||||
{
|
||||
if (!workList[i].CanTransferTo(CECHPWork.GetWorkMask(iWorkID)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool HasWorkOnPriority(int iPriority)
|
||||
{
|
||||
return ValidatePriority(iPriority) && m_WorkStack[iPriority].Count != 0;
|
||||
}
|
||||
|
||||
public void SetPostTickCommand(CECHPWorkPostTickCommand command)
|
||||
{
|
||||
m_pPostTickCommand = command;
|
||||
}
|
||||
|
||||
bool HasWorkRunningOnPriority(int iPriority){
|
||||
return HasWorkOnPriority(iPriority);
|
||||
}
|
||||
bool IsAnyWorkRunning(){
|
||||
return HasWorkRunningOnPriority(m_iCurPriority);
|
||||
}
|
||||
|
||||
public void Tick(float dwDeltaTime)
|
||||
{
|
||||
if (!IsAnyWorkRunning())
|
||||
{
|
||||
return;
|
||||
}
|
||||
WorkList workList = m_WorkStack[m_iCurPriority];
|
||||
for (int i = 0; i < workList.Count;)
|
||||
{
|
||||
CECHPWork pWork = workList[i];
|
||||
|
||||
SetPostTickCommand(null);
|
||||
pWork.Tick(dwDeltaTime);
|
||||
|
||||
if (m_pPostTickCommand == null)
|
||||
{
|
||||
if (!pWork.IsFinished())
|
||||
{
|
||||
++i;
|
||||
continue;
|
||||
}
|
||||
KillWork(m_iCurPriority, i);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pPostTickCommand.Run(this);
|
||||
SetPostTickCommand(null);
|
||||
break; // 不确定 m_pPostTickCommand 执行什么内容,此处跳出
|
||||
}
|
||||
}
|
||||
if (workList.Count == 0)
|
||||
{
|
||||
StartAwaitingWorks();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class CECHPWorkPostTickCommand
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using BrewMonster;
|
||||
using BrewMonster.Network;
|
||||
using CSNetwork.GPDataType;
|
||||
using PerfectWorld.Scripts.Managers;
|
||||
using PerfectWorld.Scripts.Player;
|
||||
@@ -54,7 +55,8 @@ class CECHPWorkMelee : CECHPWork
|
||||
// If target turn to be un-attackable, cancel action
|
||||
if (m_pHost.AttackableJudge(m_idTarget, true) == 0)
|
||||
{
|
||||
g_pGame.GetGameSession().c2s_CmdCancelAction();
|
||||
//UnityGameSession.c2s_CmdCancelAction();
|
||||
//g_pGame.GetGameSession().c2s_CmdCancelAction();
|
||||
m_bFinished = true;
|
||||
return true;
|
||||
}
|
||||
@@ -93,7 +95,7 @@ class CECHPWorkMelee : CECHPWork
|
||||
idTraceTarget = m_idTarget;
|
||||
}
|
||||
|
||||
if (idTraceTarget && !m_pHost.IsRooting())
|
||||
if (idTraceTarget != 0 && !m_pHost.IsRooting())
|
||||
{
|
||||
CECHPWorkTrace pWork = (CECHPWorkTrace)m_pWorkMan.CreateWork(Host_work_ID.WORK_TRACEOBJECT);
|
||||
pWork.SetTraceTarget(pWork.CreatTraceTarget(idTraceTarget, CECHPWorkTrace.Trace_reason.TRACE_ATTACK));
|
||||
|
||||
@@ -24,36 +24,36 @@ public static class TraceObjectType
|
||||
public abstract class CECTracedObject
|
||||
{
|
||||
//friend CECHPWorkTrace;
|
||||
protected int m_iTraceType;
|
||||
protected int m_iTraceType;
|
||||
protected int m_iObjectId;
|
||||
protected int m_iReason;
|
||||
protected bool m_bMoreClose;
|
||||
protected CECHostPlayer m_pHost;
|
||||
|
||||
public CECTracedObject(int type, int id, CECHostPlayer pHost, int ireason)
|
||||
public CECTracedObject(int type, int id, CECHostPlayer pHost, int ireason)
|
||||
{
|
||||
m_iTraceType = type;
|
||||
m_iObjectId = id;
|
||||
m_iReason = ireason;
|
||||
m_iTraceType = type;
|
||||
m_iObjectId = id;
|
||||
m_iReason = ireason;
|
||||
m_pHost = pHost;
|
||||
m_bMoreClose = false;
|
||||
}
|
||||
public CECTracedObject(CECTracedObject rhs)
|
||||
{
|
||||
m_iTraceType = rhs.m_iTraceType;
|
||||
m_iObjectId = rhs.m_iObjectId;
|
||||
m_iReason = rhs.m_iReason;
|
||||
m_bMoreClose = rhs.m_bMoreClose;
|
||||
m_iTraceType = rhs.m_iTraceType;
|
||||
m_iObjectId = rhs.m_iObjectId;
|
||||
m_iReason = rhs.m_iReason;
|
||||
m_bMoreClose = rhs.m_bMoreClose;
|
||||
m_pHost = rhs.m_pHost;
|
||||
}
|
||||
|
||||
public abstract bool OnTargetMissing();
|
||||
public abstract A3DVECTOR3 GetTargetPos();
|
||||
public abstract bool OnTouched();
|
||||
public abstract CECTracedObject Clone();
|
||||
public abstract bool OnTargetMissing();
|
||||
public abstract A3DVECTOR3 GetTargetPos();
|
||||
public abstract bool OnTouched();
|
||||
public abstract CECTracedObject Clone();
|
||||
|
||||
public virtual bool IsTargetMissing()
|
||||
{
|
||||
{
|
||||
if (m_iObjectId != 0)
|
||||
{
|
||||
CECObject pObj = EC_ManMessageMono.Instance.GetObject(m_iObjectId, 0);
|
||||
@@ -136,7 +136,7 @@ public abstract class CECTracedObject
|
||||
if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_TALK)
|
||||
{
|
||||
fTouchRadius = 0.0f;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EC_Player pPlayer = pObject.GetComponent<CECHostPlayer>();
|
||||
@@ -159,7 +159,7 @@ public abstract class CECTracedObject
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public int GetTraceType()
|
||||
public int GetTraceType()
|
||||
{
|
||||
return m_iTraceType;
|
||||
}
|
||||
@@ -173,7 +173,7 @@ public class CECTracedNPC : CECTracedObject
|
||||
{
|
||||
protected bool m_bForceAttack;
|
||||
|
||||
public CECTracedNPC(int type, int id, CECHostPlayer pHost, int ireason, bool bForceAttack = false) : base (type, id, pHost, ireason)
|
||||
public CECTracedNPC(int type, int id, CECHostPlayer pHost, int ireason, bool bForceAttack = false) : base(type, id, pHost, ireason)
|
||||
{
|
||||
m_bForceAttack = bForceAttack;
|
||||
}
|
||||
@@ -274,7 +274,7 @@ public class CECTracedNPC : CECTracedObject
|
||||
|
||||
public class CECTracedPlayer : CECTracedObject
|
||||
{
|
||||
protected bool m_bForceAttack;
|
||||
protected bool m_bForceAttack;
|
||||
public CECTracedPlayer(int type, int id, CECHostPlayer pHost, int ireason, bool bForceAttack = false) : base(type, id, pHost, ireason)
|
||||
{
|
||||
m_bForceAttack = bForceAttack;
|
||||
@@ -319,7 +319,7 @@ public class CECTracedPlayer : CECTracedObject
|
||||
|
||||
public override bool OnTouched()
|
||||
{
|
||||
bool bActionDone =false;
|
||||
bool bActionDone = false;
|
||||
if (GPDataTypeHelper.ISPLAYERID(m_iObjectId))
|
||||
{
|
||||
if (m_iObjectId == 0 || m_iObjectId == m_pHost.GetCharacterID())
|
||||
@@ -411,7 +411,7 @@ public class CECTracedMatter : CECTracedObject
|
||||
{
|
||||
|
||||
}
|
||||
public CECTracedMatter(CECTracedMatter rhs) : base(rhs)
|
||||
public CECTracedMatter(CECTracedMatter rhs) : base(rhs)
|
||||
{
|
||||
|
||||
}
|
||||
@@ -503,19 +503,19 @@ public class CECTracedMatter : CECTracedObject
|
||||
};
|
||||
public class CECHPWorkTrace : CECHPWork
|
||||
{
|
||||
// Trace reason
|
||||
public static class Trace_reason
|
||||
// Trace reason
|
||||
public static class Trace_reason
|
||||
{
|
||||
public const int TRACE_NONE = -1,
|
||||
TRACE_ATTACK = 0, // Normal attack
|
||||
TRACE_PICKUP = 1, // Pickup object
|
||||
TRACE_TALK = 2, // Go to talk
|
||||
TRACE_SPELL = 3, // Cast magic
|
||||
TRACE_GATHER = 4; // Gather object
|
||||
}
|
||||
// Constructor and Destructor
|
||||
public CECHPWorkTrace(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_TRACEOBJECT, pWorkMan)
|
||||
{
|
||||
public const int TRACE_NONE = -1,
|
||||
TRACE_ATTACK = 0, // Normal attack
|
||||
TRACE_PICKUP = 1, // Pickup object
|
||||
TRACE_TALK = 2, // Go to talk
|
||||
TRACE_SPELL = 3, // Cast magic
|
||||
TRACE_GATHER = 4; // Gather object
|
||||
}
|
||||
// Constructor and Destructor
|
||||
public CECHPWorkTrace(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_TRACEOBJECT, pWorkMan)
|
||||
{
|
||||
m_dwMask = Work_mask.MASK_TRACEOBJECT;
|
||||
m_dwTransMask = Work_mask.MASK_STAND | Work_mask.MASK_MOVETOPOS | Work_mask.MASK_FLYOFF | Work_mask.MASK_FREEFALL |
|
||||
Work_mask.MASK_FOLLOW | Work_mask.MASK_USEITEM;
|
||||
@@ -523,11 +523,11 @@ public class CECHPWorkTrace : CECHPWork
|
||||
Reset();
|
||||
}
|
||||
|
||||
// Change trace target
|
||||
//void ChangeTarget(int idTarget, int iReason, bool bUseAutoPF=false);
|
||||
// 设定traceobject
|
||||
public void SetTraceTarget(CECTracedObject pTraceObj, bool bUseAutoPF = false)
|
||||
{
|
||||
// Change trace target
|
||||
//void ChangeTarget(int idTarget, int iReason, bool bUseAutoPF=false);
|
||||
// 设定traceobject
|
||||
public void SetTraceTarget(CECTracedObject pTraceObj, bool bUseAutoPF = false)
|
||||
{
|
||||
ResetUseAutoPF(bUseAutoPF);
|
||||
if (!pTraceObj.GetTargetObject() || pTraceObj.GetObjectID() == m_pHost.GetCharacterID())
|
||||
{
|
||||
@@ -573,8 +573,8 @@ public class CECHPWorkTrace : CECHPWork
|
||||
return null;
|
||||
}
|
||||
|
||||
// Tick routine
|
||||
public virtual bool Tick(float dwDeltaTime)
|
||||
// Tick routine
|
||||
public virtual bool Tick(float dwDeltaTime)
|
||||
{
|
||||
base.Tick(dwDeltaTime);
|
||||
|
||||
@@ -640,8 +640,8 @@ public virtual bool Tick(float dwDeltaTime)
|
||||
|
||||
return true;
|
||||
}
|
||||
// Reset work
|
||||
public override void Reset()
|
||||
// Reset work
|
||||
public override void Reset()
|
||||
{
|
||||
base.Reset();
|
||||
|
||||
@@ -658,8 +658,8 @@ public override void Reset()
|
||||
m_dwAutoPFNextCheckTime = 0;
|
||||
m_pTraceObject = null;
|
||||
}
|
||||
// Work is cancel
|
||||
public override void Cancel()
|
||||
// Work is cancel
|
||||
public override void Cancel()
|
||||
{
|
||||
//if (m_pHost.m_pPrepSkill && m_pTraceObject.GetTraceReason() == Trace_reason.TRACE_SPELL)
|
||||
// m_pHost.m_pPrepSkill = null;
|
||||
@@ -675,10 +675,10 @@ public override void Cancel()
|
||||
//AP_ActionEvent(m_bActionDone ? AP_EVENT_TRACEOK : AP_EVENT_MOVEFINISHED, m_pTraceObject.GetTraceReason());
|
||||
}
|
||||
|
||||
// This work is do player moving ?
|
||||
public override bool IsMoving() { return true; }
|
||||
// Copy work data
|
||||
public override bool CopyData(CECHPWork pWork)
|
||||
// This work is do player moving ?
|
||||
public override bool IsMoving() { return true; }
|
||||
// Copy work data
|
||||
public override bool CopyData(CECHPWork pWork)
|
||||
{
|
||||
if (!base.CopyData(pWork))
|
||||
return false;
|
||||
@@ -705,22 +705,22 @@ public override bool CopyData(CECHPWork pWork)
|
||||
return true;
|
||||
}
|
||||
|
||||
// User press cancel button
|
||||
public void PressCancel()
|
||||
// User press cancel button
|
||||
public void PressCancel()
|
||||
{
|
||||
m_bReadyCancel = true;
|
||||
//if (m_pTraceObject.GetTraceReason() == TRACE_SPELL)
|
||||
// m_pHost.m_pPrepSkill = NULL;
|
||||
}
|
||||
// Set move close flag
|
||||
public void SetMoveCloseFlag(bool bMoveClose) { m_pTraceObject.SetMoveCloseFlag(bMoveClose); }
|
||||
// Set move close flag
|
||||
public void SetMoveCloseFlag(bool bMoveClose) { m_pTraceObject.SetMoveCloseFlag(bMoveClose); }
|
||||
|
||||
// Set / Get force attack flag
|
||||
public void SetForceAttack(bool bTrue) { m_bForceAttack = bTrue; }
|
||||
public bool GetForceAttack() { return m_bForceAttack; }
|
||||
// Set / Get prepared skill
|
||||
public void SetPrepSkill(CECSkill pSkill) { /*m_pPrepSkill = pSkill;*/ }
|
||||
public CECSkill GetPrepSkill() { /*return m_pPrepSkill;*/ return null; }
|
||||
public CECSkill GetPrepSkill() { /*return m_pPrepSkill;*/ return null; }
|
||||
// Get target ID
|
||||
public int GetTarget() { return m_pTraceObject.GetObjectID(); }
|
||||
// Get trace reason
|
||||
@@ -734,18 +734,18 @@ public CECSkill GetPrepSkill() { /*return m_pPrepSkill;*/ return null; }
|
||||
// CECIntelligentRoute.Instance().ResetSearch();
|
||||
//}
|
||||
}
|
||||
public bool GetUseAutoPF()
|
||||
public bool GetUseAutoPF()
|
||||
{
|
||||
return m_bUseAutoPF;
|
||||
}
|
||||
public bool IsAutoPF()
|
||||
public bool IsAutoPF()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public void SetActionDone(bool bActionDone) { m_bActionDone = bActionDone; }
|
||||
public void SetActionDone(bool bActionDone) { m_bActionDone = bActionDone; }
|
||||
|
||||
public void OnTargetMissing()
|
||||
public void OnTargetMissing()
|
||||
{
|
||||
StopMove(true);
|
||||
if ((m_pTraceObject.GetTraceType() == TraceObjectType.TRACE_NPC) || (m_pTraceObject.GetTraceType() == TraceObjectType.TRACE_PLAYER))
|
||||
@@ -758,12 +758,12 @@ public void OnTargetMissing()
|
||||
//}
|
||||
}
|
||||
|
||||
public void OnTouchTarget()
|
||||
public void OnTouchTarget()
|
||||
{
|
||||
StopMove(true);
|
||||
m_bActionDone = m_pTraceObject.OnTouched();
|
||||
}
|
||||
public bool CanTouch()
|
||||
public bool CanTouch()
|
||||
{
|
||||
//CECSkill pPrepSkill = m_pHost.m_pPrepSkill;
|
||||
CheckPrepSkill();
|
||||
@@ -901,8 +901,8 @@ public bool CanTouch()
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// Trace in air and water
|
||||
public bool Trace_FlySwim(float fDeltaTime)
|
||||
// Trace in air and water
|
||||
public bool Trace_FlySwim(float fDeltaTime)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -925,19 +925,70 @@ public bool Trace_FlySwim(float fDeltaTime)
|
||||
m_bFinished = true;
|
||||
}
|
||||
}
|
||||
// Handle the case that target died when host is tracing it
|
||||
bool OnTargetDied(CECObject* pTarget);
|
||||
// Is valid time to touch target ?
|
||||
bool IsGoodTimeToTouch();
|
||||
// Check prepare skill
|
||||
void CheckPrepSkill();
|
||||
bool GetTargetCurPos(A3DVECTOR3 &pos);
|
||||
A3DVECTOR3 GetCurMovingDest();
|
||||
void UpdateUseAutoPF();
|
||||
// Handle the case that target died when host is tracing it
|
||||
public bool OnTargetDied(CECObject pTarget)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
// Is valid time to touch target ?
|
||||
public bool IsGoodTimeToTouch()
|
||||
{
|
||||
if (m_pHost.IsJumping())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// Check prepare skill
|
||||
public void CheckPrepSkill()
|
||||
{
|
||||
|
||||
void ReplaceTarget(CECTracedObject ptraceobj);
|
||||
}
|
||||
public bool GetTargetCurPos(A3DVECTOR3 pos)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
public A3DVECTOR3 GetCurMovingDest()
|
||||
{
|
||||
return new A3DVECTOR3();
|
||||
}
|
||||
public void UpdateUseAutoPF()
|
||||
{
|
||||
|
||||
void ResetUseAutoPF(bool bUseAutoPF);
|
||||
void UpdateResetUseAutoPF();
|
||||
void ClearResetUseAutoPF();
|
||||
}
|
||||
|
||||
public void ReplaceTarget(CECTracedObject ptraceobj)
|
||||
{
|
||||
//if (m_pTraceObject)
|
||||
//{
|
||||
// delete m_pTraceObject;
|
||||
//}
|
||||
m_pTraceObject = ptraceobj;
|
||||
}
|
||||
|
||||
public void ResetUseAutoPF(bool bUseAutoPF)
|
||||
{
|
||||
m_bShouldResetUseAutoPF = true;
|
||||
m_bUseAutoPFResetValue = bUseAutoPF;
|
||||
}
|
||||
public void UpdateResetUseAutoPF()
|
||||
{
|
||||
if (!m_bShouldResetUseAutoPF)
|
||||
{
|
||||
return;
|
||||
}
|
||||
//# ifdef SHOW_AUTOMOVE_FOOTPRINTS
|
||||
// g_AutoPFFollowPoints.clear();
|
||||
// g_AutoPFPathPoints.clear();
|
||||
//#endif
|
||||
//CECIntelligentRoute::Instance().SetUsage(CECIntelligentRoute::enumUsageWorkTrace);
|
||||
//CECIntelligentRoute::Instance().ResetSearch();
|
||||
SetUseAutoPF(m_bUseAutoPFResetValue);
|
||||
ClearResetUseAutoPF();
|
||||
}
|
||||
public void ClearResetUseAutoPF()
|
||||
{
|
||||
m_bShouldResetUseAutoPF = false;
|
||||
m_bUseAutoPFResetValue = false;
|
||||
}
|
||||
};
|
||||
@@ -83,15 +83,15 @@ public class CECObject : MonoBehaviour
|
||||
// Set absolute forward and up direction
|
||||
public virtual void SetDirAndUp(A3DVECTOR3 vDir, A3DVECTOR3 vUp)
|
||||
{
|
||||
if (m_bUseGroundNormal)
|
||||
{
|
||||
A3DVECTOR3 vecRight = Normalize(CrossProduct(g_vAxisY, vDir));
|
||||
A3DVECTOR3 vecNormal = m_vecGroundNormal - DotProduct(m_vecGroundNormal, vecRight) * vecRight;
|
||||
A3DVECTOR3 vecNewDir = Normalize(CrossProduct(vecRight, vecNormal));
|
||||
A3DCoordinate::SetDirAndUp(vecNewDir, vecNormal);
|
||||
}
|
||||
else
|
||||
A3DCoordinate::SetDirAndUp(vDir, vUp);
|
||||
//if (m_bUseGroundNormal)
|
||||
//{
|
||||
// A3DVECTOR3 vecRight = Normalize(CrossProduct(g_vAxisY, vDir));
|
||||
// A3DVECTOR3 vecNormal = m_vecGroundNormal - DotProduct(m_vecGroundNormal, vecRight) * vecRight;
|
||||
// A3DVECTOR3 vecNewDir = Normalize(CrossProduct(vecRight, vecNormal));
|
||||
// A3DCoordinate::SetDirAndUp(vecNewDir, vecNormal);
|
||||
//}
|
||||
//else
|
||||
// A3DCoordinate::SetDirAndUp(vDir, vUp);
|
||||
|
||||
// Stop orientation adjusting
|
||||
m_bAdjustOrient = false;
|
||||
@@ -103,24 +103,24 @@ public class CECObject : MonoBehaviour
|
||||
m_dwOrientTime = dwTime;
|
||||
m_dwOrientTimeCnt = 0;
|
||||
|
||||
// Calculate start orientation
|
||||
A3DMATRIX4 mat = a3d_TransformMatrix(GetDir(), GetUp(), g_vOrigin);
|
||||
m_quOrientStart.ConvertFromMatrix(mat);
|
||||
//// Calculate start orientation
|
||||
//A3DMATRIX4 mat = a3d_TransformMatrix(GetDir(), GetUp(), g_vOrigin);
|
||||
//m_quOrientStart.ConvertFromMatrix(mat);
|
||||
|
||||
// Calculate end orientation
|
||||
if (m_bUseGroundNormal)
|
||||
{
|
||||
A3DVECTOR3 vecRight = Normalize(CrossProduct(g_vAxisY, vDir));
|
||||
A3DVECTOR3 vecNormal = m_vecGroundNormal - DotProduct(m_vecGroundNormal, vecRight) * vecRight;
|
||||
A3DVECTOR3 vecNewDir = Normalize(CrossProduct(vecRight, vecNormal));
|
||||
mat = a3d_TransformMatrix(vecNewDir, vecNormal, g_vOrigin);
|
||||
}
|
||||
else
|
||||
{
|
||||
mat = a3d_TransformMatrix(vDir, vUp, g_vOrigin);
|
||||
}
|
||||
//// Calculate end orientation
|
||||
//if (m_bUseGroundNormal)
|
||||
//{
|
||||
// A3DVECTOR3 vecRight = Normalize(CrossProduct(g_vAxisY, vDir));
|
||||
// A3DVECTOR3 vecNormal = m_vecGroundNormal - DotProduct(m_vecGroundNormal, vecRight) * vecRight;
|
||||
// A3DVECTOR3 vecNewDir = Normalize(CrossProduct(vecRight, vecNormal));
|
||||
// mat = a3d_TransformMatrix(vecNewDir, vecNormal, g_vOrigin);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// mat = a3d_TransformMatrix(vDir, vUp, g_vOrigin);
|
||||
//}
|
||||
|
||||
m_quOrientEnd.ConvertFromMatrix(mat);
|
||||
//m_quOrientEnd.ConvertFromMatrix(mat);
|
||||
}
|
||||
|
||||
// Calculate distance between this object and specified position
|
||||
@@ -181,7 +181,17 @@ public class CECObject : MonoBehaviour
|
||||
// Get object id
|
||||
public static int GetObjectID(CECObject pObject)
|
||||
{
|
||||
if (!pObject)
|
||||
return 0;
|
||||
|
||||
if (pObject.IsPlayer())
|
||||
return ((EC_Player)pObject).GetCharacterID();
|
||||
else if (pObject.IsNPC())
|
||||
return ((CECNPC)pObject).GetNPCID();
|
||||
//else if (pObject.IsMatter())
|
||||
// return ((CECMatter*)pObject)->GetMatterID();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected int m_iCID; // Class ID
|
||||
|
||||
@@ -13,7 +13,7 @@ public class CECMonster : CECNPC
|
||||
public override void SetUpCECNPC(CECNPCMan pNPCMan)
|
||||
{
|
||||
base.SetUpCECNPC(pNPCMan);
|
||||
m_iCID = (int)ClassID.OCID_MONSTER;
|
||||
m_iCID = (int)Class_ID.OCID_MONSTER;
|
||||
m_pDBEssence = default;
|
||||
}
|
||||
public override bool Init(int tid, in info_npc info, ReadOnlySpan<byte> packet, int infoOffset)
|
||||
|
||||
@@ -899,6 +899,9 @@ public class CECNPC : CECObject
|
||||
//}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get NPC ID
|
||||
public int GetNPCID() { return m_NPCInfo.nid; }
|
||||
}
|
||||
public enum WorkType
|
||||
{
|
||||
|
||||
@@ -42,6 +42,7 @@ public class CECHostPlayer : EC_Player
|
||||
public bool m_bPrepareFight = false; // true, prepare to fight
|
||||
int m_iJumpCount = 0;
|
||||
bool m_bJumpInWater = false;
|
||||
public A3DVECTOR3 m_vVelocity; // Velocity
|
||||
|
||||
float playerSpeed = 5.0f;
|
||||
float jumpHeight = 1.5f;
|
||||
|
||||
@@ -331,6 +331,8 @@ public class CECHostMove
|
||||
|
||||
public int MoveBlocked() { return m_iBlockedCnt; }
|
||||
public void SetSlideLock(bool bLock) { m_bSlideLock = bLock; }
|
||||
// Is stoping ?
|
||||
public bool IsStop() { return m_bStop; }
|
||||
}
|
||||
public struct CDR_INFO
|
||||
{
|
||||
|
||||
@@ -379,6 +379,8 @@ public abstract class EC_Player : CECObject
|
||||
|
||||
// Get move environment
|
||||
public int GetMoveEnv(){ return m_iMoveEnv; }
|
||||
// Get character ID
|
||||
public int GetCharacterID(){ return m_PlayerInfo.cid; }
|
||||
}
|
||||
public struct PlayActionEvent
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user