Exemple #1
0
void ConfVarTable::Clear()
{
	assert( typeTable == _type );
	assert( !_frozen );
	ClearInternal();
	FireValueUpdate(this);
}
Exemple #2
0
ConfVarTable::~ConfVarTable()
{
	assert(typeTable == _type);
	ClearInternal();
	delete _val.asTable;
	_type = typeNil;
}
Exemple #3
0
bool CGroupObject::UpdateReference(bool bForceReload)
{
	if (!m_ReferenceName_.size())
    {
        ELog.Msg			(mtError,"ERROR: '%s' - has empty reference.",Name);
     	return 				false;
    }

    
    xr_string fn			= m_ReferenceName_.c_str();
    fn						= EFS.ChangeFileExt(fn,".group");
    IReader* R				= FS.r_open(_groups_, fn.c_str());
    bool bres				= false;
    if (R)
    {
    	bForceInitListBox	= TRUE;
  	  	ObjectsInGroup		ObjectsInGroupBk = m_ObjectsInGroup;

    	if(bForceReload)
          ClearInternal		(ObjectsInGroupBk);
        
        m_ObjectsInGroup.clear();
        

        xr_string nm		= Name;
		shared_str old_refs	= m_ReferenceName_;
        UpdateTransform		(true);
        Fvector old_pos		= PPosition;
        Fvector old_rot		= PRotation;
        Fvector old_sc		= PScale;

        if(LoadStream(*R))
        {
            Name 		= nm.c_str();
            bres		= true;
	        UpdateTransform	(true);
        }
        FS.r_close			(R);
	
    	SetRefName(old_refs.c_str());
        NumSetPosition		(old_pos);
        NumSetRotation		(old_rot);
        NumSetScale			(old_sc);
        UpdateTransform		(true);

		if(m_ObjectsInGroup.size()==ObjectsInGroupBk.size())
        {
        	ObjectsInGroup::iterator it = m_ObjectsInGroup.begin();
        	ObjectsInGroup::iterator itBk = ObjectsInGroupBk.begin();
            for(; it!=m_ObjectsInGroup.end(); ++it, ++itBk)
            {
				it->pObject->m_CO_Flags.set(flObjectInGroupUnique, FALSE);
               
               if(itBk->pObject->m_CO_Flags.test(flObjectInGroupUnique) )
               {
               	  std::swap(*itBk, *it);
               }else
               	 it->pObject->Name = itBk->pObject->Name;
            }
        }else
        {
        	if(ObjectsInGroupBk.size())
            {
        		ELog.Msg		(mtError, "Not all objects synchronised correctly", Name);
                for (ObjectsInGroup::iterator it=m_ObjectsInGroup.begin(); it!=m_ObjectsInGroup.end(); ++it)
                        it->pObject->m_CO_Flags.set(flObjectInGroupUnique, FALSE);
            }else
            { // first setup
                for (ObjectsInGroup::iterator it=m_ObjectsInGroup.begin(); it!=m_ObjectsInGroup.end(); ++it)
                        it->pObject->m_CO_Flags.set(flObjectInGroupUnique, FALSE);
            }
        }

        ClearInternal		(ObjectsInGroupBk);
        
    }else
    {
        ELog.Msg		(mtError,"ERROR: Can't open group file: '%s'.",fn.c_str());
    }
    
    return bres;
}