예제 #1
0
    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;
}