예제 #1
0
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CHL2WarsPlayer::ClientCommand( const CCommand &args )
{
    // FIXME: Most commands do not check the number of args.
    //        (Although this doesn't really matter since an arg out of range is just an empty string...).
    if( GetControlledUnit() && GetControlledUnit()->GetIUnit() )
    {
        if( GetControlledUnit()->GetIUnit()->ClientCommand( args ) )
            return true;
    }

    if( !V_stricmp( args[0], "player_clearselection" ) )
    {
        ClearSelection();
        return true;
    }
    else if( !V_stricmp( args[0], "player_addunit" ) )
    {
        for( int i = 1; i < args.ArgC(); i++ )
        {
#ifdef CLIENTSENDEHANDLE
            long iEncodedEHandle = atol(args[i]);
            int iSerialNum = (iEncodedEHandle >> MAX_EDICT_BITS);
            int iEntryIndex = iEncodedEHandle & ~(iSerialNum << MAX_EDICT_BITS);
            EHANDLE pEnt( iEntryIndex, iSerialNum );
#else
            CBaseEntity *pEnt = UTIL_EntityByIndex( atoi(args[i]) );
#endif // CLIENTSENDEHANDLE
            //DevMsg( "player_addunit: selecting ent #%d\n",  atoi(args[i]) );
            if( pEnt && pEnt->IsAlive() && pEnt->GetIUnit() )
                pEnt->GetIUnit()->Select(this);
            else
                DevMsg( "player_addunit: tried to select an invalid unit (#%d)\n",  atoi(args[i]) );
        }
        return true;
    }
    else if( !V_stricmp( args[0], "player_removeunit" ) )
예제 #2
0
Acad::ErrorStatus CGraphListCtrl::GetBlock1( LPCTSTR szBlockName, AcDbBlockTableRecord*& pBlockRecord )
{
	Acad::ErrorStatus es;
	pBlockRecord = NULL;

	AcDbBlockTableRecordPointer pSrcRc(szBlockName, m_pCurDb, AcDb::kForRead);
	es = pSrcRc.openStatus();
	if (Acad::eOk != es)
		return es;

	AcDbBlockTablePointer pDestTbl(m_DefDb, AcDb::kForRead);
	es = pDestTbl.openStatus();
	if (Acad::eOk != es)
		return es;

	AcDbBlockTableRecordPointer pDestRc;
	pDestRc.create();
	es = pDestRc.openStatus();
	if (Acad::eOk != es)
		return es;

	es = pDestRc->setName(szBlockName);
	if (Acad::eOk != es)
		return es;

	pDestTbl->upgradeOpen();
	es = pDestTbl->add(pDestRc.object());
	pDestTbl->downgradeOpen();
	if (Acad::eOk != es)
		return es;

	AcDbBlockTableRecordIterator* pIter = NULL;
	es = pSrcRc->newIterator(pIter);
	if (Acad::eOk != es)
		return es;

	AcDbObjectId objId;
	AcDbIdMapping idMap;
	AcDbObject* pObject = NULL;
	for (pIter->start(); !pIter->done(); pIter->step())
	{
		es = pIter->getEntityId(objId);
		if (Acad::eOk != es)
			continue;

		AcDbEntityPointer pEnt(objId, AcDb::kForRead);
		es = pEnt.openStatus();
		if (Acad::eOk != es)
			continue;

		if (pEnt->isKindOf(AcDbText::desc()))
		{
			continue;
		}

		es = pEnt->deepClone(pDestRc.object(), pObject, idMap, true);
		if (Acad::eOk != es)
			continue;

		pObject->close();
	}

	pBlockRecord = pDestRc.object();
	return es;
}
예제 #3
0
//method
ISerialEntity *CSerialEntityXML::NewChild(void)
{
	CSerialEntityXML *pEnt(new CSerialEntityXML(this));
	return pEnt;
}