void ArAIAttackCommand::Update(float dt) { // Update orientation auto entityPtr = ArGameApp::Get()->GetEntityManager()->FindEntity(mTarget); auto targetEntity = std::dynamic_pointer_cast<ArNPCEntity>(entityPtr); if (targetEntity) { ArMoveProperty::UpdateRotation(mEntity, targetEntity->GetRenderObj()->GetPosition(), dt, mEntity->GetAttribute()->GetEntityConfig()->turnrate); } mTimer += dt; if (mTimer >= mCoolDownTime) { PlayClip(); } }
//------------------------------------------------------------------------- // 创建渲染对象 // 参数:szGameObjName 游戏对象名 FKRenderObj* FKRenderObjMgr::CreateRenderObj( const char* szGameObjName ) { if( szGameObjName == NULL ) return NULL; static RENDER_OBJ_ID s_RenderObjID = 0; if( ++s_RenderObjID == 0 ) s_RenderObjID++; FKRenderObj* pRenderObj = GetRenderObj( s_RenderObjID ); while( pRenderObj != NULL ) { // 一定要找到一个空的 ++s_RenderObjID; pRenderObj = GetRenderObj( s_RenderObjID ); } string strPathName, strFileName, strExtName; FKCW_Base_Utils::ParseFilePathName( szGameObjName, strPathName, strFileName, strExtName ); FKCW_Base_Utils::ToLowerCase( strExtName ); if( strExtName != "fko" ) { pRenderObj = new FKRenderObj( s_RenderObjID ); if( pRenderObj == NULL ) { return NULL; } pRenderObj->Create( szGameObjName ); } else { RenderObjModelMap::iterator IteObjModel = m_mapRenderObjModels.find( szGameObjName ); if( IteObjModel == m_mapRenderObjModels.end() ) { FKRenderObjModel* pRenderObjModel = new FKRenderObjModel(); if( pRenderObjModel == NULL ) return NULL; string strObjName = szGameObjName; if( !pRenderObjModel->LoadFromFKOFile( strObjName ) ) { return NULL; } else { m_mapRenderObjModels[ strObjName ] = pRenderObjModel; IteObjModel = m_mapRenderObjModels.find( strObjName ); } } pRenderObj = new FKRenderObj( s_RenderObjID ); if( pRenderObj == NULL ) return NULL; pRenderObj->SetObjModel( (IRenderObjModel*)IteObjModel->second ); pRenderObj->Create( szGameObjName ); } m_mapRenderObjs[s_RenderObjID] = pRenderObj; return pRenderObj; }