public static MethodGenerationData GenerateLoadMethod(List <PlayerDataEditorData> datas, string category) { List <string> bodyStatement = new List <string>(); for (int i = 0; i < datas.Count; i++) { bool usesReactiveProperty = PlayerDataCodeGeneratorUtility.UsesReactiveProperty(datas[i].baseDataType); // Example: _playerData.Set_TestInt(_playerDataManager.TryLoad<int>(PlayerDataKeys.INT_TEST_INT)) string defaultValue = "default"; bool isVariableCollection = VariableTypeCheckerUtility.IsVariableCollection(datas[i].baseDataType); bool IsVariableDictionary = VariableTypeCheckerUtility.IsVariableDictionary(datas[i].baseDataType); string baseFormat = "{0}.{1} = {2}.TryLoad<{3}>({4}.{5}, {6}, {7});"; string loadType = datas[i].baseDataType; if (isVariableCollection) { defaultValue = $"new {datas[i].baseDataType}<{datas[i].valueDataType}>()"; baseFormat = "{0}.{1} = new " + ReactivePropertyEditorUtility.CreateReactivePropertyType(datas[i]) + "({2}.TryLoad<{3}>({4}.{5}, {6}, {7}));"; loadType = $"{datas[i].baseDataType}<{datas[i].valueDataType}>"; } else if (IsVariableDictionary) { defaultValue = $"new {datas[i].baseDataType}<{datas[i].keyDataType}, {datas[i].valueDataType}>()"; baseFormat = "{0}.{1} = new " + ReactivePropertyEditorUtility.CreateReactivePropertyType(datas[i]) + "({2}.TryLoad<{3}>({4}.{5}, {6}, {7}));"; loadType = $"{datas[i].baseDataType}<{datas[i].keyDataType},{datas[i].valueDataType}>"; } bodyStatement.Add(string.Format(baseFormat, PlayerDataCodeGeneratorConstants.PLAYER_DATA_REFERENCE_NAME, usesReactiveProperty ? datas[i].key.ToCamelCase(false) : datas[i].key.ToCamelCase(false) + ".Value", PlayerDataCodeGeneratorConstants.PLAYER_DATA_MANAGER_REFERENCE_NAME, loadType, PlayerDataCodeGeneratorConstants.PLAYER_DATA_KEYS_CLASS_NAME, datas[i].key, defaultValue, datas[i].isLocalOnly.ToString().ToLower())); } return(new MethodGenerationData { m_MethodName = PlayerDataCodeGeneratorConstants.LOADER_METHOD_NAME + category, m_MethodReturnType = "void", m_MethodBodyStatements = bodyStatement }); }
public static MethodGenerationData GeneratePlayerDataKeyValueGetterMethod(List <PlayerDataEditorData> datas, string category) { List <string> statements = new List <string>(); foreach (var data in datas) { bool useReactiveProperty = PlayerDataCodeGeneratorUtility.UsesReactiveProperty(data.baseDataType); // dictionary[PlayerDataKeys.INT_TEST_INT] = () => _playerDataGetter.GetValue_TestInt(); statements.Add(string.Format("getterMap[{0}.{1}] = () => {2}.{3}{4}();", PlayerDataCodeGeneratorConstants.PLAYER_DATA_KEYS_CLASS_NAME, data.key, PlayerDataCodeGeneratorConstants.PLAYER_DATA_GETTER_REFERENCE_NAME, useReactiveProperty ? PlayerDataCodeGeneratorConstants.GETTER_GET_REACTIVE_PROPERTY_METHOD_NAME : PlayerDataCodeGeneratorConstants.GETTER_GET_VALUE_METHOD_NAME, data.key.ToCamelCase(true))); } return(new MethodGenerationData { m_MethodName = PlayerDataCodeGeneratorConstants.KEY_VALUE_GETTER_MAP_METHOD_NAME + category, m_MethodReturnType = "void", m_MethodBodyStatements = statements, m_ProtectionLevel = ProtectionLevel.Private }); }