[更新]
一個Actor更新中:
1. m_TaskManager.Run(fDelta);
2. ProcessNetwork(fDelta);
3. ProcessAI(fDelta);
處理actor->Brain->Think()中
bool bFind = FindTarget();
if ( bFind)
{
ProcessBuildPath( fDelta);
ProcessAttack( fDelta);
}
4. ProcessMovement(fDelta);
5. ProcessMotion(fDelta);
一。ProcessAI()
actor->Brain->Think()處理中產生一個Task
一個任務有 移動,攻擊,延時,轉向等,其中攻擊有肉搏,范圍,技能
比如:actor->Brain->Think()中發了現敵人后在ProcessAttack()中產生一個skilltask存入到
actor->m_TaskManager中
二。m_TaskManager.Run()
在在taskMgr中處理m_pCurrTask的3個步驟(start,run,complete):
舉例: 如ZTask_Skill:
1. OnStart()中
a.parent(是一個actor)->Skill(m_nSkill); // 進行動作輸入(動作用了m_AniFSM進行管理)
b.ZPostNPCSkillStart(ownerid,nSkill,Targetid,TargetPos);
這會生成一個id為MC_QUEST_PEER_NPC_SKILL_START的cmd并push到全局的m_CommandManager中
2. OnRun()中
if時間到了則ZPostNPCSkillExecute(ownerid,nSkill,Targetid,TargetPos);
產生的命令id==MC_QUEST_PEER_NPC_SKILL_EXECUTE;
3 . OnComplete()中
ZTask_Skill中無處理.
三。m_pGameInterface->Update()中從m_CommandQueue中取出cmd, 對其:
1. SendCommand(pCommand);
2. OnCommand(pCommand);
switch(cmd->id)調用對應的處理函數,
例如:
a. id==MC_QUEST_PEER_NPC_SKILL_START時將調用OnPeerNPCSkillStart()
在其中通過uidOwner找得actor得到它的ZModule_Skills處理模塊傳入cmd的參數處理之.
這會進行發起特效處理
b. id==MC_QUEST_PEER_NPC_SKILL_EXECUTE時時將調用OnPeerNPCSkillExecute()
在其中通過uidOwner找得actor得到它的ZModule_Skills處理模塊傳入cmd的參數處理之.
這會進行攻擊特效處理:
1). 如果是bHitCheck標志的特效,則轉讓全局的武器管理類處理:
m_WeaponManager.AddMagic( this, vMissilePos, vMissileDir, m_pOwner);進行處理
這里判斷如果循環次數減到0,則m_bEnable = false;
2).否則:
a. 如果有相機震動標志,則通知照相機震動處理
GetCamera()->Shock( fPower*fDefaultPower, fDuration, rvector( 0.0f, 0.0f, -1.0f));
b. 遍歷所有角色,檢測是否范圍內以及抗性沒抵消完傷害:
(1)是攻擊則
pObject->OnDamaged(..)
否則
pObject->OnHealing(..)
(2)限速:
pMovableModule->SetMoveSpeedRestrictRatio( 0, fDuration);
(3)擊退:
pObject->AddVelocity( m_pDesc->fModKnockback * 7.f * -dir);
3). 特效燃燒效果:
if(m_pDesc->szCastingEffect[0]) {
if(type != eq_parts_pos_info_etc)
efgmgr->AddPartsPosType(m_pDesc->szCastingEffect, Targetid,type,m_pDesc->nEffectTime);
else
efgmgr->Add(m_pDesc->szCastingEffect, vPos,vDir,OwnerID,m_pDesc->nEffectTime);
}
if(m_pDesc->szCastingEffectSp[0]) {
ZGetEffectManager()->AddSp(m_pDesc->szCastingEffectSp,m_pDesc->nCastingEffectSpCount,
vPos,vDir,m_pOwner->GetUID());
}
3). 提示信息顯示處理
4). 聲音播放處理.
四。ZWeaponMgr處理:
上述的OnPeerNPCSkillExecute()處理中發現是飛行特效轉交給ZWeaponMgr來處理,所以這里說一下
在這里會處理特效模型飛行并處理Explosion( type, pPickObject,pickdir);爆炸傷害!轉調用到pTarget->OnDamaged(..)
posted on 2012-08-13 09:49
flipcode 閱讀(285)
評論(0) 編輯 收藏 引用