⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conditionobjectmanager.cpp

📁 墨香最新私服
💻 CPP
字号:
// ConditionObjectManager.cpp: implementation of the CConditionObjectManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ConditionObjectManager.h"
#include "OPDATA.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#define _SWTHS(a)			switch(a)	{	case -1:	{
#define _SWTHE				}	return FALSE;		}
#define CASEOF(a)				}	return FALSE;		case (a):	{



CConditionObjectManager::CConditionObjectManager()
{
	m_ppOPDATAList = NULL;
	m_wMaxOPDATANum = 0;
}

CConditionObjectManager::~CConditionObjectManager()
{
	DeleteAllOPDATA();
}


void CConditionObjectManager::LoadOPDATA()
{
	/*
	CMHFile file;
		file.Init("OPDataList.txt", "r");
	
		m_wMaxOPDATANum = file.GetWord();
		m_ppOPDATAList = void*[m_wMaxOPDATANum];
		for( int i = 0 ; i < m_wMaxOPDATANum ; ++i )
		{
			m_ppOPDATAList[i] = NULL;
		}*/
}
void CConditionObjectManager::DeleteAllOPDATA()
{
	delete [] m_ppOPDATAList;
	m_ppOPDATAList = NULL;
}
BOOL CConditionObjectManager::AddOPDATA( void * pDataObj, DWORD opCode )
{
	if(m_ppOPDATAList[opCode])
		return FALSE;
	m_ppOPDATAList[opCode] = pDataObj;
	return TRUE;
}
void * CConditionObjectManager::GetOPDATA( DWORD opCode )
{
	return m_ppOPDATAList[opCode];
}

CONDITION_FUNC	CConditionObjectManager::GetSITUATIONFunc(SITUATIONIDX idx)
{
	return globalSITUATION[idx];
}


BOOL CConditionObjectManager::Evaluate(DWORD opCode1, DWORD oprator, DWORD opCode2 )
{
	OPBASE * b1 = static_cast<OPBASE *>(GetOPDATA(opCode1));
	
	_SWTHS( b1->GetOPType() )
	CASEOF(OP_DW)
		COPDATA<DWORD> * cb1 = static_cast<COPDATA<DWORD> *>(b1);
		OPBASE * b2 = static_cast<OPBASE *>(GetOPDATA(opCode2));
		_SWTHS( b2->GetOPType() )
		CASEOF(OP_DW)
			COPDATA<DWORD> * cb2 = static_cast<COPDATA<DWORD> *>(b2);
			_SWTHS( oprator )
			CASEOF(LESSTHAN_TYPE)
				if( cb1->GetOPData() < cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(MORETHAN_TYPE)
				if( cb1->GetOPData() > cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(LTEQUAL_TYPE)
				if( cb1->GetOPData() <= cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(MTEQUAL_TYPE)
				if( cb1->GetOPData() >= cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(EQUAL_TYPE)
				if( cb1->GetOPData() == cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			_SWTHE
		_SWTHE
	CASEOF(OP_IN)
		COPDATA<int> * cb1 = static_cast<COPDATA<int> *>(b1);
		OPBASE * b2 = static_cast<OPBASE *>(CONDITIONOBJMGR->GetOPDATA(opCode2));
		_SWTHS( b2->GetOPType() )
		CASEOF(OP_DW)
			COPDATA<int> * cb2 = static_cast<COPDATA<int> *>(b2);
			_SWTHS( oprator )
			CASEOF(LESSTHAN_TYPE)
				if( cb1->GetOPData() < cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(MORETHAN_TYPE)
				if( cb1->GetOPData() > cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(LTEQUAL_TYPE)
				if( cb1->GetOPData() <= cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(MTEQUAL_TYPE)
				if( cb1->GetOPData() >= cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(EQUAL_TYPE)
				if( cb1->GetOPData() == cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			_SWTHE
		_SWTHE
	CASEOF(OP_LG)
		COPDATA<LONG> * cb1 = static_cast<COPDATA<LONG> *>(b1);
		OPBASE * b2 = static_cast<OPBASE *>(CONDITIONOBJMGR->GetOPDATA(opCode2));
		_SWTHS( b2->GetOPType() )
		CASEOF(OP_DW)
			COPDATA<LONG> * cb2 = static_cast<COPDATA<LONG> *>(b2);
			_SWTHS( oprator )
			CASEOF(LESSTHAN_TYPE)
				if( cb1->GetOPData() < cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(MORETHAN_TYPE)
				if( cb1->GetOPData() > cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(LTEQUAL_TYPE)
				if( cb1->GetOPData() <= cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(MTEQUAL_TYPE)
				if( cb1->GetOPData() >= cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			CASEOF(EQUAL_TYPE)
				if( cb1->GetOPData() == cb2->GetOPData() )
					return TRUE;
				else
					return FALSE;
			_SWTHE
		_SWTHE
	_SWTHE	

	ASSERT(0);
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -