示例#1
0
void CCmdBornObject::_Execute()
{
    if( m_diff.veCMapEditModelFileNames.empty() )
        return;



    if ( m_diff.pObject == NULL )
    {
        string modelname = m_diff.veCMapEditModelFileNames[0];
        size_t npos = modelname.rfind("\\");
        modelname = modelname.substr(npos+1, modelname.length());
        char szObjectBuf[256];
        sprintf(szObjectBuf, "DO born object,num = %d, name = %s", m_diff.veCMapEditModelFileNames.size(), modelname.c_str());
        COpearationLog::GetInst()->WriteOperationLog(szObjectBuf);

        m_diff.pObject = new CTObject;
        CEditModelGroup * pModelGroup = new CEditModelGroup;

        vector<CMapEditObject*> vec;
        vector<string>::iterator iter = m_diff.veCMapEditModelFileNames.begin();
        for ( int i = 0 ; iter != m_diff.veCMapEditModelFileNames.end(); ++iter, ++i )
        {
            CMapEditObject * p = NULL;

            p = CSceneManager::GetInst()->AddNodeModel(*iter, m_diff.bSubUnit, m_diff.vUserOffset.y, m_diff.vUserOffset.x, m_diff.vUserOffset.z, m_diff.vUserOffsetEx.y, m_diff.vUserOffsetEx.x, m_diff.vUserOffsetEx.z, m_diff.fRotation, m_diff.nRotationCnt,
                    m_diff.fPitch, m_diff.nPitchCnt, m_diff.fYaw, m_diff.nYawCnt, m_diff.xScale, m_diff.yScale, m_diff.zScale, m_diff.bEffectBase, m_diff.bAudio, m_diff.bLoginModel);

            if ( NULL == p )
            {
// 				string log = *iter;
// 				log += "没有找到";
// 				MessageBox(0, log.c_str(), "路径错误", 0);

                //delete 掉 new的东西,并将指针情况
                delete pModelGroup;
                pModelGroup = NULL;

                m_diff.pObject = NULL;

                return;
            }
            vec.push_back(p);
            //CMapEditApp::GetInst()->GetRenderScene()->AddToRenderScene(p);
            p->SetVisible(true);
            p->SetGroupOffset(m_diff.vGroupOffset);
        }

        pModelGroup->AddContainer(vec,m_diff.bSubUnit,m_diff.bCenterType,0,0);
        pModelGroup->SetItemName(m_diff.strItemName);
        pModelGroup->SetModelFileNames(m_diff.veCMapEditModelFileNames);
        pModelGroup->SetIsCameraOriented(m_diff.bCameraOriented);
        pModelGroup->SetIsEffectBased(m_diff.bEffectBase);
        pModelGroup->SetResGroupMark(m_diff.bResGroupMark);
        pModelGroup->SetIsVisibleByConfigure(m_diff.bVisibleByConfigure);
        pModelGroup->SetIsTranslucent(m_diff.bTranslucent);

        pModelGroup->SetCastShadow(m_diff.bShadow);

        m_diff.pObject->SetModelGroup(pModelGroup);
        m_diff.pObject->SetCastShadow(m_diff.bShadow);
    }
    else
    {
        if ( m_diff.bCameraOriented )
            return;
    }

    m_diff.pObject->GetModelGroup()->SetEditState(sqr::EES_MOVING);

    ///effect
    if ( m_diff.bEffectBase )
    {
        ///也即是环境特效
        if ( m_diff.bCameraOriented )
        {
            CMapEditApp::GetInst()->GetOperator()->AddAmbientObject(m_diff.pObject);
            m_diff.pObject->GetModelGroup()->HideSelf();
        }
        else
        {
            CMapEditApp::GetInst()->GetOperator()->AddIndividualEffectObject(m_diff.pObject);
            CToolSetModel::GetInst()->AddActiveObject(m_diff.pObject);
        }
    }
    else
    {
        CToolSetModel::GetInst()->AddActiveObject(m_diff.pObject);
    }

    //		///sound
    // 		if( m_diff.pObject->GetModelGroup()->m_pSceneAudio )
    // 		{
    // 			CMapEditApp::GetInst()->GetOperator()->AddIndividualSoundObject(m_diff.pObject);
    // 		}
}