//------------------------------------------------------------------------------------- PropertyDescription* ScriptDefModule::findPropertyDescription(ENTITY_PROPERTY_UID utype, COMPONENT_TYPE componentType) { switch(componentType) { case CELLAPP_TYPE: return findCellPropertyDescription(utype); break; case BASEAPP_TYPE: return findBasePropertyDescription(utype); break; default: return findClientPropertyDescription(utype); break; }; return NULL; }
//------------------------------------------------------------------------------------- PropertyDescription* ScriptDefModule::findPropertyDescription(const char* attrName, COMPONENT_TYPE componentType) { switch(componentType) { case CELLAPP_TYPE: return findCellPropertyDescription(attrName); break; case BASEAPP_TYPE: return findBasePropertyDescription(attrName); break; default: return findClientPropertyDescription(attrName); break; }; return NULL; }
//------------------------------------------------------------------------------------- bool ScriptDefModule::addPropertyDescription(const char* attrName, PropertyDescription* propertyDescription, COMPONENT_TYPE componentType) { PropertyDescription* f_propertyDescription = NULL; PROPERTYDESCRIPTION_MAP* propertyDescr; PROPERTYDESCRIPTION_UIDMAP* propertyDescr_uidmap; switch(componentType) { case CELLAPP_TYPE: f_propertyDescription = findCellPropertyDescription(attrName); propertyDescr = &getCellPropertyDescriptions(); propertyDescr_uidmap = &getCellPropertyDescriptions_uidmap(); // 判断他们是什么级别的属性, 将其保存到对应detailLevel的地方 if((propertyDescription->getFlags() & ENTITY_CLIENT_DATA_FLAGS) > 0){ cellDetailLevelPropertyDescrs_[propertyDescription->getDetailLevel()][attrName] = propertyDescription; } setCell(true); break; case BASEAPP_TYPE: f_propertyDescription = findBasePropertyDescription(attrName); propertyDescr = &getBasePropertyDescriptions(); propertyDescr_uidmap = &getBasePropertyDescriptions_uidmap(); setBase(true); break; default: f_propertyDescription = findClientPropertyDescription(attrName); propertyDescr = &getClientPropertyDescriptions(); propertyDescr_uidmap = &getClientPropertyDescriptions_uidmap(); setClient(true); break; }; if(f_propertyDescription) { ERROR_MSG("ScriptDefModule::addPropertyDescription: [%s] is exist! componentType=%d.\n", attrName, componentType); return false; } (*propertyDescr)[attrName] = propertyDescription; (*propertyDescr_uidmap)[propertyDescription->getUType()] = propertyDescription; propertyDescription->incRef(); // 判断是否是存储属性, 是就存储到persistentPropertyDescr_ if(propertyDescription->isPersistent()) { PROPERTYDESCRIPTION_MAP::const_iterator pciter = persistentPropertyDescr_.find(attrName); if(pciter == persistentPropertyDescr_.end()) { persistentPropertyDescr_[attrName] = propertyDescription; persistentPropertyDescr_uidmap_[propertyDescription->getUType()] = propertyDescription; } } return true; }
//------------------------------------------------------------------------------------- bool ScriptDefModule::addPropertyDescription(const char* attrName, PropertyDescription* propertyDescription, COMPONENT_TYPE componentType, bool ignoreConflict) { if(!ignoreConflict && hasMethodName(attrName)) { ERROR_MSG(fmt::format("ScriptDefModule::addPropertyDescription: There is a method[{}] name conflict! componentType={}.\n", attrName, componentType)); return false; } if (!ignoreConflict && hasComponentName(attrName)) { ERROR_MSG(fmt::format("ScriptDefModule::addPropertyDescription: There is a component[{}] name conflict!\n", attrName)); return false; } bool isEntityComponent = propertyDescription->getDataType() && std::string("ENTITY_COMPONENT") == propertyDescription->getDataType()->getName(); PropertyDescription* f_propertyDescription = NULL; PROPERTYDESCRIPTION_MAP* propertyDescr; PROPERTYDESCRIPTION_UIDMAP* propertyDescr_uidmap; switch(componentType) { case CELLAPP_TYPE: f_propertyDescription = findCellPropertyDescription(attrName); propertyDescr = &getCellPropertyDescriptions(); propertyDescr_uidmap = &getCellPropertyDescriptions_uidmap(); // 判断他们是什么级别的属性, 将其保存到对应detailLevel的地方 if((propertyDescription->getFlags() & ENTITY_CLIENT_DATA_FLAGS) > 0){ cellDetailLevelPropertyDescrs_[propertyDescription->getDetailLevel()][attrName] = propertyDescription; } setCell(true); break; case BASEAPP_TYPE: f_propertyDescription = findBasePropertyDescription(attrName); propertyDescr = &getBasePropertyDescriptions(); propertyDescr_uidmap = &getBasePropertyDescriptions_uidmap(); setBase(true); break; default: f_propertyDescription = findClientPropertyDescription(attrName); propertyDescr = &getClientPropertyDescriptions(); propertyDescr_uidmap = &getClientPropertyDescriptions_uidmap(); setClient(true); break; }; if(f_propertyDescription) { ERROR_MSG(fmt::format("ScriptDefModule::addPropertyDescription: [{}] is exist! componentType={}.\n", attrName, componentType)); return false; } (*propertyDescr)[attrName] = propertyDescription; (*propertyDescr_uidmap)[propertyDescription->getUType()] = propertyDescription; propertyDescription->incRef(); if(isEntityComponent) componentPropertyDescr_[attrName] = propertyDescription; // 判断是否是存储属性, 是就存储到persistentPropertyDescr_ if(propertyDescription->isPersistent()) { PROPERTYDESCRIPTION_MAP::const_iterator pciter = persistentPropertyDescr_.find(attrName); if(pciter == persistentPropertyDescr_.end()) { persistentPropertyDescr_[attrName] = propertyDescription; persistentPropertyDescr_uidmap_[propertyDescription->getUType()] = propertyDescription; } } return true; }