void NFCProperty::SetValue(const NFIDataList::TData& xData) { if (eType != xData.GetType()) { return; } if (xData.IsNullValue()) { return; } if (nullptr == mxData) { mxData = NF_SHARE_PTR<NFIDataList::TData>(NF_NEW NFIDataList::TData(xData)); } NFCDataList::TData oldValue; oldValue = *mxData; mxData->variantData = xData.variantData; NFCDataList::TData newValue; newValue = *mxData; OnEventHandler(oldValue, newValue); }
int NFCPropertyTrailModule::OnObjectRecordEvent(const NFGUID& self, const RECORD_EVENT_DATA& xEventData, const NFIDataList::TData& oldVar, const NFIDataList::TData& newVar) { std::ostringstream stream; NF_SHARE_PTR<NFIRecord> xRecord = m_pKernelModule->FindRecord(self, xEventData.strRecordName); if (nullptr == xRecord) { return 0; } switch (xEventData.nOpType) { case NFIRecord::RecordOptype::Add: { NFCDataList xDataList; bool bRet = xRecord->QueryRow(xEventData.nRow, xDataList); if (bRet) { stream << " Trail Add Row[" << xEventData.nRow << "]"; for (int j = 0; j < xDataList.GetCount(); ++j) { stream << " [" << j << "] " << xDataList.StringValEx(j); } m_pLogModule->LogRecord(NFILogModule::NF_LOG_LEVEL::NLL_INFO_NORMAL, self, xRecord->GetName(), stream.str(), __FUNCTION__, __LINE__); } } break; case NFIRecord::RecordOptype::Del: { stream << " Trail Del Row[" << xEventData.nRow << "]"; m_pLogModule->LogRecord(NFILogModule::NF_LOG_LEVEL::NLL_INFO_NORMAL, self, xRecord->GetName(), stream.str(), __FUNCTION__, __LINE__); } break; case NFIRecord::RecordOptype::Swap: { stream << " Trail Swap Row[" << xEventData.nRow << "] Row[" << xEventData.nCol << "]"; m_pLogModule->LogRecord(NFILogModule::NF_LOG_LEVEL::NLL_INFO_NORMAL, self, xRecord->GetName(), stream.str(), __FUNCTION__, __LINE__); } break; case NFIRecord::RecordOptype::Create: break; case NFIRecord::RecordOptype::Update: { stream << " Trail UpData Row[" << xEventData.nRow << "] Col[" << xEventData.nCol << "]"; stream << " [Old] " << oldVar.StringValEx(); stream << " [New] " << newVar.StringValEx(); m_pLogModule->LogRecord(NFILogModule::NF_LOG_LEVEL::NLL_INFO_NORMAL, self, xRecord->GetName(), stream.str(), __FUNCTION__, __LINE__); } break; case NFIRecord::RecordOptype::Cleared: break; case NFIRecord::RecordOptype::Sort: break; default: break; } return 0; }
int NFCPropertyTrailModule::OnObjectPropertyEvent(const NFGUID& self, const std::string& strPropertyName, const NFIDataList::TData& oldVar, const NFIDataList::TData& newVar) { std::ostringstream stream; stream << " Trailing "; stream << " [Old] "; stream << oldVar.GetString(); stream << " [New] "; stream << newVar.GetString(); m_pLogModule->LogProperty(NFILogModule::NF_LOG_LEVEL::NLL_INFO_NORMAL, self, strPropertyName, stream.str(), __FUNCTION__, __LINE__); return 0; }
TDATA_TYPE NFCClassModule::ComputerType(const char* pstrTypeName, NFIDataList::TData& var) { if (0 == strcmp(pstrTypeName, "int")) { var.SetInt(NULL_INT); return var.GetType(); } else if (0 == strcmp(pstrTypeName, "string")) { var.SetString(NULL_STR); return var.GetType(); } else if (0 == strcmp(pstrTypeName, "float")) { var.SetFloat(NULL_FLOAT); return var.GetType(); } else if (0 == strcmp(pstrTypeName, "object")) { var.SetObject(NULL_OBJECT); return var.GetType(); } return TDATA_UNKNOWN; }
bool NFCRecord::SetObject(const int nRow, const int nCol, const NFGUID& value) { if (!ValidPos(nRow, nCol)) { return false; } if (TDATA_OBJECT != GetColType(nCol)) { return false; } if (!IsUsed(nRow)) { return false; } NFIDataList::TData var; var.SetObject(value); NF_SHARE_PTR<NFIDataList::TData>& pVar = mtRecordVec.at(GetPos(nRow, nCol)); //must have memory if (nullptr == pVar) { return false; } if (var == *pVar) { return false; } NFCDataList::TData oldValue; oldValue.SetObject(pVar->GetObject()); pVar->variantData = value; RECORD_EVENT_DATA xEventData; xEventData.nOpType = Update; xEventData.nRow = nRow; xEventData.nCol = nCol; xEventData.strRecordName = mstrRecordName; OnEventHandler(mSelf, xEventData, oldValue, *pVar); return true; }
int NFCGameScene::OnObjectPropertyEvent(const NFGUID& self, const std::string& strPropertyName, const NFIDataList::TData& oldVar, const NFIDataList::TData& newVar) { Sprite *pPlayer = m_Players.GetElement(self); auto pName = ui::Text::create(newVar.GetString(), "", 16); pName->setAnchorPoint(Vec2(0.5, 0)); pName->setPosition(Vec2(pPlayer->getAnchorPointInPoints().x, pPlayer->getContentSize().height)); pPlayer->addChild(pName); return 0; }
bool NFCClassModule::AddPropertys(rapidxml::xml_node<>* pPropertyRootNode, NF_SHARE_PTR<NFIClass> pClass) { for (rapidxml::xml_node<>* pPropertyNode = pPropertyRootNode->first_node(); pPropertyNode; pPropertyNode = pPropertyNode->next_sibling()) { if (pPropertyNode) { const char* strPropertyName = pPropertyNode->first_attribute("Id")->value(); if (pClass->GetPropertyManager()->GetElement(strPropertyName)) { //error NFASSERT(0, strPropertyName, __FILE__, __FUNCTION__); continue; } const char* pstrType = pPropertyNode->first_attribute("Type")->value(); const char* pstrPublic = pPropertyNode->first_attribute("Public")->value(); const char* pstrPrivate = pPropertyNode->first_attribute("Private")->value(); const char* pstrSave = pPropertyNode->first_attribute("Save")->value(); const char* pstrCache = pPropertyNode->first_attribute("Cache")->value(); const char* pstrRef = pPropertyNode->first_attribute("Ref")->value(); const char* pstrUpload = pPropertyNode->first_attribute("Upload")->value(); bool bPublic = lexical_cast<bool>(pstrPublic); bool bPrivate = lexical_cast<bool>(pstrPrivate); bool bSave = lexical_cast<bool>(pstrSave); bool bCache = lexical_cast<bool>(pstrCache); bool bRef = lexical_cast<bool>(pstrRef); bool bUpload = lexical_cast<bool>(pstrUpload); NFIDataList::TData varProperty; if (TDATA_UNKNOWN == ComputerType(pstrType, varProperty)) { //std::cout << "error:" << pClass->GetTypeName() << " " << pClass->GetInstancePath() << ": " << strPropertyName << " type error!!!" << std::endl; NFASSERT(0, strPropertyName, __FILE__, __FUNCTION__); } //printf( " Property:%s[%s]\n", pstrPropertyName, pstrType ); NF_SHARE_PTR<NFIProperty> xProperty = pClass->GetPropertyManager()->AddProperty(NFGUID(), strPropertyName, varProperty.GetType()); xProperty->SetPublic(bPublic); xProperty->SetPrivate(bPrivate); xProperty->SetSave(bSave); xProperty->SetCache(bCache); xProperty->SetRef(bRef); xProperty->SetUpload(bUpload); } } return true; }
int NFCNPCRefreshModule::OnObjectHPEvent( const NFGUID& self, const std::string& strPropertyName, const NFIDataList::TData& oldVar, const NFIDataList::TData& newVar) { if ( newVar.GetInt() <= 0 ) { NFGUID identAttacker = m_pKernelModule->GetPropertyObject( self, NFrame::NPC::LastAttacker()); if (!identAttacker.IsNull()) { m_pEventProcessModule->DoEvent( self, NFED_ON_OBJECT_BE_KILLED, NFCDataList() << identAttacker ); m_pKernelModule->AddHeartBeat( self, "OnDeadDestroyHeart", this, &NFCNPCRefreshModule::OnDeadDestroyHeart, 5.0f, 1 ); } } return 0; }
bool NFCElementInfoModule::Load(rapidxml::xml_node<>* attrNode, NF_SHARE_PTR<NFILogicClass> pLogicClass) { //attrNode is the node of a object std::string strConfigID = attrNode->first_attribute("ID")->value(); if (strConfigID.empty()) { NFASSERT(0, strConfigID, __FILE__, __FUNCTION__); return false; } if (ExistElement(strConfigID)) { NFASSERT(0, strConfigID, __FILE__, __FUNCTION__); return false; } NF_SHARE_PTR<ElementConfigInfo> pElementInfo(NF_NEW ElementConfigInfo()); AddElement(strConfigID, pElementInfo); //can find all configid by class name pLogicClass->AddConfigName(strConfigID); //ElementConfigInfo* pElementInfo = CreateElement( strConfigID, pElementInfo ); NF_SHARE_PTR<NFIPropertyManager> pElementPropertyManager = pElementInfo->GetPropertyManager(); NF_SHARE_PTR<NFIRecordManager> pElementRecordManager = pElementInfo->GetRecordManager(); //1.add property //2.set the default value of them NF_SHARE_PTR<NFIPropertyManager> pClassPropertyManager = pLogicClass->GetPropertyManager(); NF_SHARE_PTR<NFIRecordManager> pClassRecordManager = pLogicClass->GetRecordManager(); if (pClassPropertyManager.get() && pClassRecordManager.get()) { NF_SHARE_PTR<NFIProperty> pProperty = pClassPropertyManager->First(); while (pProperty.get()) { pElementPropertyManager->AddProperty(NFGUID(), pProperty); pProperty = pClassPropertyManager->Next(); } NF_SHARE_PTR<NFIRecord> pRecord = pClassRecordManager->First(); while (pRecord.get()) { pElementRecordManager->AddRecord(NFGUID(), pRecord->GetName(), pRecord->GetInitData(), pRecord->GetKeyState(), pRecord->GetInitDesc(), pRecord->GetTag(), pRecord->GetRelatedRecord(), pRecord->GetRows(), pRecord->GetPublic(), pRecord->GetPrivate(), pRecord->GetSave(), pRecord->GetView(), pRecord->GetIndex()); pRecord = pClassRecordManager->Next(); } } //3.set the config value to them //const char* pstrConfigID = attrNode->first_attribute( "ID" ); for (rapidxml::xml_attribute<>* pAttribute = attrNode->first_attribute(); pAttribute; pAttribute = pAttribute->next_attribute()) { const char* pstrConfigName = pAttribute->name(); const char* pstrConfigValue = pAttribute->value(); //printf( "%s : %s\n", pstrConfigName, pstrConfigValue ); NF_SHARE_PTR<NFIProperty> temProperty = pElementPropertyManager->GetElement(pstrConfigName); if (!temProperty) { continue; } NFIDataList::TData var; TDATA_TYPE eType = temProperty->GetType(); switch (eType) { case TDATA_INT: { if (!LegalNumber(pstrConfigValue)) { NFASSERT(0, temProperty->GetKey(), __FILE__, __FUNCTION__); } var.SetInt(lexical_cast<NFINT64>(pstrConfigValue)); } break; case TDATA_FLOAT: { if (strlen(pstrConfigValue) <= 0) { NFASSERT(0, temProperty->GetKey(), __FILE__, __FUNCTION__); } var.SetFloat((double)atof(pstrConfigValue)); } break; case TDATA_STRING: var.SetString(pstrConfigValue); break; case TDATA_OBJECT: { if (strlen(pstrConfigValue) <= 0) { NFASSERT(0, temProperty->GetKey(), __FILE__, __FUNCTION__); } var.SetObject(NFGUID()); } break; default: NFASSERT(0, temProperty->GetKey(), __FILE__, __FUNCTION__); break; } pElementPropertyManager->SetProperty(pstrConfigName, var); } NFIDataList::TData xData; xData.SetString(pLogicClass->GetClassName()); pElementPropertyManager->SetProperty("ClassName", xData); return true; }
int HelloWorld2::OnPropertyCallBackEvent( const NFGUID& self, const std::string& strProperty, const NFIDataList::TData& oldVar, const NFIDataList::TData& newVar ) { //属性回调事件,只要属性值内容有变化,就会被回调 std::cout << "OnPropertyCallBackEvent Property: " << strProperty << " OldValue: " << oldVar.GetInt() << " NewValue: " << newVar.GetInt() << std::endl; return 0; }