예제 #1
0
bool CEditorAction::Valid(CApplication* pApp)
{
	// if the user removes an object sometimes the conditions / actions can still refer to the removed object
	// and this causes a headache

	// uberhack: set global filter removed
	if (oid == -1 && actID == 7)
		return false;

	CObjType* objecttype = pApp->FindObjTypeFromNumber(oid);
	if(objecttype )
	{
		if(mid < -1)
		{
			//check that the effect still exists
			if(!objecttype->GetEffect(mid * -1))
				return false;
		}
		if(mid > -1)
		{
			if(!objecttype->GetBehaviorByUniqueID(mid))
				return false;
		}
		
		// loop each param;
		for(int p = 0; p < params.size(); p++)
		{
			CEditorParam* param = params.at(p);
			if(param->m_type == 14) //variable
			{
				// lookup the variable
				if(!objecttype->GetPrivateVariable(atoi(param->CreateParamString(pApp))))
					return false;
			}
			if(param->m_type == 13) //global
			{
				if(!pApp->GetGlobalVariable(atoi(param->CreateParamString(pApp))))
					return false;
			}
			if(param->m_type == EDITORPARAM_OBJECT)
			{
				CString stparam = param->CreateParamString(pApp);
				int o = atoi(stparam);
				if(o == 0 && stparam != "0")
					return true; //attribute
				
				if(!pApp->FindObjTypeFromNumber( o))
					return false;

			}
			if(pApp)
				param->CreateParamString(pApp); //Calling this function updates valid...terrible design but meh
			if(param->valid == false)
				return false;
		}
		return true;
	
	}
	return false;
}
예제 #2
0
bool CEditorCondition::Serialize(CArchive &ar, CChronoEventEditor* Ed)
{
	CString ExpectedName = "CEditorCondition";
	int     Version      = 2;

	if (!SerializeClassHeader(ExpectedName, Version, ar))
		return false;

	if( ar.IsLoading())
	{
		m_visible = true;
		m_Valid = true;
		ar >> mid;
		ar >> cndID;
		ar >> oid;
		if(Ed)	Ed->RegisterObjectID(oid, ar);
		ar >> m_Negate;
		ar >> m_Family >> m_FamilyName;

		ar >> m_rect_default;
		ar >> m_select_default;
		ar >> m_select_default;
		ar >> m_Anim.Space;
		ar // //m_Text - note: must call EventSheetEditor::ReformatCondition 
			>> m_Object >> m_Script;
		m_Anim.m_bDestroyed = false;

		m_Text = "";

		int size = 0;
		ar >> size;
		for (int i = 0; i < size; i++)
		{
			CEditorParam* Param = new CEditorParam;
			Param->Serialize(ar, Ed);
 			params.push_back(Param);
		}

		if (oid != -1)
		{
			CString name = "";
			ar >> name;
			OINFO* o = GetOINFO(name);
			if (!o)
			{
				CErrorDlg Dlg;
				Dlg.Error("Error in condition.", "An invalid object in a condition was referenced.");

				return false;
			}

			DLLIndex = o->oID;
		}
예제 #3
0
bool CEditorAction::Serialize(CArchive &ar, CChronoEventEditor* Ed )
{
	CString ExpectedName = "CEditorAction";
	int     Version      = 2;

	if (!SerializeClassHeader(ExpectedName, Version, ar))
		return false;

	if(ar.IsLoading())
	{
		m_visible = true;
		m_Valid = true;
		ar >> m_Family >> m_FamilyName;	
		ar >> actID;
		ar >> oid;

		if(Ed) Ed->RegisterObjectID(oid, ar);
		ar >> m_rect_default;
		ar >> m_select_default;
		ar >> m_Anim.Space;
		m_Anim.m_bDestroyed = false;
		ar //>> m_Text - note: must call EventSheetEditor::ReformatAction 
			>> m_Object >> m_Script;
		ar >> mid;

		m_Text = "";

		int size = 0;
		ar >> size;
		for (int i = 0; i < size; i++)
		{
			CEditorParam* Param = new CEditorParam;
			Param->Serialize(ar, Ed);
			params.push_back(Param);
		}

		CString name = "";
		ar >> name;
		OINFO* o = GetOINFO(name);

		if(o)
			DLLIndex = o->oID;
		else
			DLLIndex = -1;

		if(Version >= 2)
			ar >> m_bEnabled;
		else