Exemple #1
0
        internal static void SetCodeCollection(
            CodeDefinition codeDefinition,
            List <string> codeCollection,
            DataContainer dataContainer)
        {
            var code             = string.Empty;
            var columnCollection = Def.ColumnDefinitionCollection
                                   .Where(o => o.TableName == dataContainer.TableName)
                                   .Where(o => !CheckExclude(codeDefinition, o))
                                   .OrderBy(o => o[Strings.CoalesceEmpty(codeDefinition.Order, "No")])
                                   .ToList();
            var count = columnCollection.Count();

            columnCollection.ForEach(columnDefinition =>
            {
                dataContainer.ColumnName = columnDefinition.ColumnName;
                Creators.SetCodeCollection(
                    ref code,
                    codeCollection,
                    codeDefinition,
                    dataContainer,
                    () => ReplaceCode(
                        ref code,
                        codeDefinition,
                        columnDefinition,
                        count));
                dataContainer.ColumnName = string.Empty;
            });
        }
Exemple #2
0
        internal static void SetCodeCollection(
            CodeDefinition codeDefinition,
            List <string> codeCollection,
            DataContainer dataContainer)
        {
            var code = string.Empty;

            dataContainer
            .XlsIoCollection[dataContainer.DefinitionName]
            .XlsSheet
            .Columns
            .ForEach(definitionColumnName =>
                     Creators.SetCodeCollection(
                         ref code,
                         codeCollection,
                         codeDefinition,
                         dataContainer,
                         () =>
            {
                var definitionColumnNameAlternate = definitionColumnName
                                                    .EscapeReservedWord()
                                                    .Replace("-", "_");
                var definitionColumnType = dataContainer
                                           .XlsIoCollection[dataContainer.DefinitionName]
                                           .XlsSheet[0][definitionColumnName]
                                           .ToString();
                ReplaceCode(
                    ref code,
                    codeDefinition,
                    dataContainer.DefinitionName,
                    definitionColumnName,
                    definitionColumnNameAlternate,
                    definitionColumnType);
            }));
        }
        private static void ReplaceCode(
            ref string code,
            CodeDefinition codeDefinition,
            DataContainer dataContainer)
        {
            foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder))
            {
                switch (placeholder)
                {
                case "File":
                    code = code.Replace("#File#", dataContainer.DefinitionName);
                    break;

                case "file":
                    code = code.Replace("#file#", dataContainer.DefinitionName.ToLowerFirstChar());
                    break;

                case "ColumnNames":
                    code = code.Replace("#ColumnNames#", ColumnNames(dataContainer));
                    break;
                }
            }
            if (!codeDefinition.ReplaceOld.IsNullOrEmpty())
            {
                code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew);
            }
        }
        internal static void SetCodeCollection(
            CodeDefinition codeDefinition,
            List <string> codeCollection,
            DataContainer dataContainer)
        {
            var code = string.Empty;

            Def.BaseItemColumnDefinitionCollection(order: codeDefinition.Order)
            .Where(o => Column.CheckExclude(codeDefinition, o) == false)
            .Where(o => !o.EachModel)
            .ForEach(columnDefinition =>
            {
                dataContainer.TableName  = "_BaseItems";
                dataContainer.ColumnName = columnDefinition.ColumnName;
                Creators.SetCodeCollection(
                    ref code,
                    codeCollection,
                    codeDefinition,
                    dataContainer,
                    () => Column.ReplaceCode(
                        ref code,
                        codeDefinition,
                        columnDefinition));
                dataContainer.TableName  = string.Empty;
                dataContainer.ColumnName = string.Empty;
            });
        }
Exemple #5
0
 internal static void SetCodeCollection_Default(
     CodeDefinition codeDefinition,
     List <string> codeCollection,
     DataContainer dataContainer)
 {
     if (!Table.CheckExclude(codeDefinition, dataContainer.TableName) ||
         dataContainer.TableName == string.Empty)
     {
         var code = Creators.Create(codeDefinition, dataContainer);
         if (dataContainer.ColumnName != string.Empty)
         {
             var columnDefinition = Def.ColumnDefinitionCollection.First(o =>
                                                                         o.TableName == dataContainer.TableName &&
                                                                         o.ColumnName == dataContainer.ColumnName);
             if (!CheckExclude(codeDefinition, columnDefinition))
             {
                 ReplaceCode(ref code, codeDefinition, columnDefinition);
                 codeCollection.Add(code);
             }
         }
         else
         {
             codeCollection.Add(code);
         }
     }
 }
Exemple #6
0
        internal static void SetCodeCollection(
            CodeDefinition codeDefinition,
            List <string> codeCollection,
            DataContainer dataContainer)
        {
            var code = string.Empty;

            Def.ColumnDefinitionCollection
            .Where(o => !Column.CheckExclude(codeDefinition, o))
            .Where(o => o.TableName == dataContainer.TableName)
            .OrderBy(o => o.No)
            .ForEach(columnDefinition =>
            {
                dataContainer.ColumnName = columnDefinition.ColumnName;
                Creators.SetCodeCollection(
                    ref code, codeCollection, codeDefinition, dataContainer, () =>
                {
                    var tableNameAlias = TableNameAlias(columnDefinition);
                    ReplaceCodeOfJoin(
                        ref code,
                        codeDefinition,
                        columnDefinition,
                        tableNameAlias: TableNameAlias(columnDefinition),
                        columnNameAlias: ColumnNameAlias(columnDefinition),
                        joinType: JoinType(columnDefinition),
                        joinExpression: columnDefinition.JoinExpression);
                });
                dataContainer.ColumnName = string.Empty;
            });
        }
        internal static string FormattedCode(this CodeDefinition codeRow)
        {
            string code = string.Empty;

            if (codeRow.Body.IndexOf("\r\n") == -1)
            {
                code += Strings.Tab(codeRow.Indent) + codeRow.Body;
            }
            else
            {
                codeRow.Body.SplitReturn().ForEach(line =>
                {
                    if (line.Trim().IsNullOrEmpty())
                    {
                        code += "\r\n";
                    }
                    else if (line.StartsWith("<!--"))
                    {
                        code += line + "\r\n";
                    }
                    else
                    {
                        code += Strings.Tab(codeRow.Indent) + line + "\r\n";
                    }
                });
            }
            code = code.NoSpace(codeRow.NoSpace);
            return(code);
        }
Exemple #8
0
        internal static void SetCodeCollection(
            CodeDefinition codeDefinition,
            List <string> codeCollection,
            DataContainer dataContainer)
        {
            dataContainer.Type = "Table";
            var code            = string.Empty;
            var parentTableName = dataContainer.TableName;
            var parentModelName = dataContainer.ModelName;

            Def.TableNameCollection(order: codeDefinition.Order)
            .Where(o => !CheckExclude(codeDefinition, o))
            .ForEach(tableName =>
            {
                dataContainer.TableName = tableName;
                dataContainer.ModelName = Def.ModelNameByTableName(tableName);
                Creators.SetCodeCollection(
                    ref code,
                    codeCollection,
                    codeDefinition,
                    dataContainer,
                    () => ReplaceCode(ref code, codeDefinition, dataContainer));
            });
            dataContainer.TableName = parentTableName;
            dataContainer.ModelName = parentModelName;
        }
 private static string CodeChildCollection(
     string code,
     string placeholder,
     CodeDefinition codeChildDefinition,
     List <string> codeChildCollection)
 {
     return(code.Replace(
                placeholder,
                codeChildCollection.Join(codeChildDefinition.Separator.Replace("\\r\\n", "\r\n"))));
 }
 internal static void SetCodeCollection_Default(
     CodeDefinition codeDefinition,
     List <string> codeCollection,
     DataContainer dataContainer)
 {
     if (!CheckExcludeConditionsByDefName(codeDefinition, dataContainer))
     {
         codeCollection.Add(Creators.Create(codeDefinition, dataContainer));
     }
 }
 internal static void SetCodeCollection(
     ref string code,
     List <string> codeCollection,
     CodeDefinition codeDefinition,
     DataContainer dataContainer,
     Action replaceCode)
 {
     code = Create(codeDefinition, dataContainer);
     replaceCode();
     codeCollection.Add(code);
 }
Exemple #12
0
        internal static bool CheckExclude(CodeDefinition codeDefinition, string tableName)
        {
            var columns = Def.ColumnDefinitionCollection
                          .Where(o => o.TableName == tableName)
                          .ToList();

            if (codeDefinition.ItemOnly && !columns.Any(o => o.ItemId > 0))
            {
                return(true);
            }
            if (codeDefinition.NotItem && columns.Any(o => o.ItemId > 0))
            {
                return(true);
            }
            if (codeDefinition.GenericUi && !columns.Any(o => o.GenericUi))
            {
                return(true);
            }
            if (codeDefinition.NotGenericUi && columns.Any(o => o.GenericUi))
            {
                return(true);
            }
            if (codeDefinition.UpdateMonitor && !columns.Any(o => o.UpdateMonitor))
            {
                return(true);
            }
            if (codeDefinition.HasIdentity && !columns.Any(o => o.Identity))
            {
                return(true);
            }
            if (codeDefinition.HasNotIdentity && columns.Any(o => o.Identity))
            {
                return(true);
            }
            if (codeDefinition.HasTableNameId && tableName.CsTypeIdColumn().IsNullOrEmpty())
            {
                return(true);
            }
            if (codeDefinition.HasNotTableNameId && !tableName.CsTypeIdColumn().IsNullOrEmpty())
            {
                return(true);
            }
            if (codeDefinition.Exclude.Split(',').Contains(tableName))
            {
                return(true);
            }
            if (!codeDefinition.Include.IsNullOrEmpty() && !codeDefinition.Include.Split(',').Contains(tableName))
            {
                return(true);
            }
            return(false);
        }
Exemple #13
0
 private static void ReplaceCode(
     ref string code,
     CodeDefinition codeDefinition,
     string formName,
     string modelName)
 {
     code = code.Replace("#FormName#", !formName.IsNullOrEmpty()
         ? formName
         : modelName + "Form");
     if (!codeDefinition.ReplaceOld.IsNullOrEmpty())
     {
         code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew);
     }
 }
Exemple #14
0
 private static void ReplaceCode(
     ref string code,
     CodeDefinition codeDefinition,
     string formName,
     string modelName)
 {
     code = code.Replace("#FormName#", formName != string.Empty
         ? formName
         : modelName + "Form");
     if (codeDefinition.ReplaceOld != string.Empty)
     {
         code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew);
     }
 }
Exemple #15
0
        public static Guid ToGuid(this FilterChannel filterChannel, CodeDefinition codeDefinition)
        {
            // With the filter extension, channels are produced dynamically, so there
            // is no way to generate an ID once and store it somewhere. Therefore the
            // ID must be generated each time the filter code is instantiated. To avoid
            // having ever changing IDs, the ID is effectively a good hash code based
            // on the project ID and channel name. In the end this means that the
            // channel name determines the ID. And so renaming a channel means changing
            // the ID.
            var value = $"({codeDefinition.Id}) {filterChannel.ProjectId}/{filterChannel.ChannelName}";
            var md5   = MD5.Create();                                   // compute hash is not thread safe!
            var hash  = md5.ComputeHash(Encoding.UTF8.GetBytes(value)); //

            return(new Guid(hash));
        }
Exemple #16
0
        private static void ReplaceCode(
            ref string code,
            CodeDefinition codeDefinition,
            string definitionName,
            string definitionColumnName,
            string definitionColumnNameAlternate,
            string definitionColumnType)
        {
            foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder))
            {
                switch (placeholder)
                {
                case "DefColumnName":
                    code = code.Replace("#DefColumnName#", definitionColumnNameAlternate);
                    break;

                case "DefColumnNameOriginal":
                    code = code.Replace("#DefColumnNameOriginal#", definitionColumnName);
                    break;

                case "Type":
                    code = code.Replace("#Type#", definitionColumnType);
                    break;

                case "CastType":
                    code = code.Replace("#CastType#", definitionColumnType.CastType());
                    break;

                case "File":
                    code = code.Replace("#File#", definitionName);
                    break;

                case "file":
                    code = code.Replace("#file#", definitionName.ToLowerFirstChar());
                    break;

                case "SetDefault":
                    code = code.Replace("#SetDefault#", definitionColumnType
                                        .DefaultSetter());
                    break;
                }
            }
            if (codeDefinition.ReplaceOld != string.Empty)
            {
                code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew);
            }
        }
Exemple #17
0
        public static bool TryGetFilterCodeDefinition(DatasetInfo datasetInfo, out CodeDefinition codeDefinition)
        {
            codeDefinition = default;

            if (FilterDataReader.FilterDataReaderCache.TryGetValue(datasetInfo.Registration, out var cacheEntries))
            {
                var cacheEntry = cacheEntries
                                 .FirstOrDefault(entry => entry.SupportedChanneIds.Contains(datasetInfo.Parent.Id));

                if (cacheEntry is not null)
                {
                    codeDefinition = cacheEntry.FilterCodeDefinition;
                    return(true);
                }
            }

            return(false);
        }
Exemple #18
0
 internal static bool CheckExclude(CodeDefinition codeDefinition, string tableName)
 {
     if (codeDefinition.ItemOnly && !Def.ExistsTable(tableName, o => o.ItemId > 0))
     {
         return(true);
     }
     if (codeDefinition.NotItem && Def.ExistsTable(tableName, o => o.ItemId > 0))
     {
         return(true);
     }
     if (codeDefinition.GenericUi && !Def.ExistsTable(tableName, o => o.GenericUi))
     {
         return(true);
     }
     if (codeDefinition.UpdateMonitor && !Def.ExistsTable(tableName, o => o.UpdateMonitor))
     {
         return(true);
     }
     if (codeDefinition.HasIdentity && !Def.ExistsTable(tableName, o => o.Identity))
     {
         return(true);
     }
     if (codeDefinition.HasNotIdentity && Def.ExistsTable(tableName, o => o.Identity))
     {
         return(true);
     }
     if (codeDefinition.HasTableNameId && tableName.CsTypeIdColumn() == string.Empty)
     {
         return(true);
     }
     if (codeDefinition.HasNotTableNameId && tableName.CsTypeIdColumn() != string.Empty)
     {
         return(true);
     }
     if (codeDefinition.Exclude.Split(',').Contains(tableName))
     {
         return(true);
     }
     if (codeDefinition.Include != string.Empty && !codeDefinition.Include.Split(',').Contains(tableName))
     {
         return(true);
     }
     return(false);
 }
Exemple #19
0
        internal static void SetCodeCollection(
            CodeDefinition codeDefinition,
            List <string> codeCollection,
            DataContainer dataContainer)
        {
            var code = string.Empty;

            DisplayAccessor.Displays.DisplayHash
            .Select(o => o.Value)
            .ForEach(display => display.Languages
                     .Where(element => !CheckExclude(codeDefinition, display, element))
                     .ForEach(element =>
                              Creators.SetCodeCollection(
                                  ref code,
                                  codeCollection,
                                  codeDefinition,
                                  dataContainer,
                                  () => ReplaceCode(ref code, display, element))));
        }
Exemple #20
0
 private static bool CheckExclude(
     CodeDefinition codeDefinition,
     DisplayAccessor.Display display,
     DisplayAccessor.DisplayElement element)
 {
     if (!codeDefinition.DisplayLanguages && !element.Language.IsNullOrEmpty())
     {
         return(true);
     }
     if (!codeDefinition.DisplayType.IsNullOrEmpty() && !codeDefinition.DisplayType.Split(',').Contains(display.Type.ToString()))
     {
         return(true);
     }
     if (codeDefinition.ClientScript && display.ClientScript != true)
     {
         return(true);
     }
     return(false);
 }
Exemple #21
0
        //unlock all 12 outfits. don't mess with toggle codes here
        public static void UnlockAllCodes()
        {
            List <CodeDefinition> codes = Game.Data.Codes.GetAll();

            foreach (CodeDefinition code in codes)
            {
                //if (Game.Manager.Settings.unlockCodes.ContainsKey(code.codeHash))
                {
                    CodeDefinition codeDefinition = code;
                    CodeType       codeType       = codeDefinition.codeType;
                    if (codeType == CodeType.UNLOCK)
                    {
                        if (!Game.Persistence.playerData.unlockedCodes.Contains(codeDefinition))
                        {
                            Game.Persistence.playerData.unlockedCodes.Add(codeDefinition);
                        }
                    }
                }
            }
        }
        internal static void SetCodeCollection(
            CodeDefinition codeDefinition,
            List <string> codeCollection,
            DataContainer dataContainer)
        {
            var code = string.Empty;

            dataContainer.XlsIoCollection.Keys.ForEach(definitionName =>
            {
                dataContainer.DefinitionName = definitionName;
                Creators.SetCodeCollection(
                    ref code,
                    codeCollection,
                    codeDefinition,
                    dataContainer,
                    () => ReplaceCode(
                        ref code,
                        codeDefinition,
                        dataContainer));
            });
        }
Exemple #23
0
        private static void ReplaceCode(
            ref string code,
            CodeDefinition codeDefinition,
            DataContainer dataContainer)
        {
            foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder))
            {
                switch (placeholder)
                {
                case "ModelName":
                    code = code.Replace("#ModelName#", dataContainer.ModelName);
                    break;

                case "modelName":
                    code = code.Replace("#modelName#", dataContainer.ModelName.ToLowerFirstChar());
                    break;

                case "modelname":
                    code = code.Replace("#modelname#", dataContainer.ModelName.ToLower());
                    break;

                case "TableName":
                    code = code.Replace("#TableName#", dataContainer.TableName);
                    break;

                case "tableName":
                    code = code.Replace("#tableName#", dataContainer.TableName.ToLowerFirstChar());
                    break;

                case "tablename":
                    code = code.Replace("#tablename#", dataContainer.TableName.ToLower());
                    break;
                }
            }
            if (codeDefinition.ReplaceOld != string.Empty)
            {
                code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew);
            }
        }
Exemple #24
0
        internal static void SetCodeCollection(
            CodeDefinition codeDefinition,
            List <string> codeCollection,
            DataContainer dataContainer)
        {
            var code = string.Empty;

            Def.ColumnDefinitionCollection
            .Where(o => o.TableName == dataContainer.TableName)
            .Select(o => new { ModelName = o.ModelName, FormName = o.FormName })
            .Distinct()
            .ForEach(data =>
            {
                dataContainer.FormName = data.FormName;
                Creators.SetCodeCollection(
                    ref code,
                    codeCollection,
                    codeDefinition,
                    dataContainer,
                    () => ReplaceCode(ref code, codeDefinition, data.FormName, data.ModelName));
            });
        }
Exemple #25
0
        internal static void SetCodeCollection(
            CodeDefinition codeDefinition,
            List <string> codeCollection,
            DataContainer dataContainer)
        {
            var code = string.Empty;

            dataContainer
            .XlsIoCollection[dataContainer.DefinitionName]
            .XlsSheet
            .AsEnumerable()
            .Skip(1)
            .Where(o => o[0].ToString() != string.Empty)
            .ForEach(definitionRow =>
                     Creators.SetCodeCollection(
                         ref code,
                         codeCollection,
                         codeDefinition,
                         dataContainer,
                         () => code = code.Replace(
                             "#Id#",
                             ReservedWords.ValidName(definitionRow[0].ToString()))));
        }
Exemple #26
0
        internal static void ReplaceCodeOfJoin(
            ref string code,
            CodeDefinition codeDefinition,
            ColumnDefinition columnDefinition,
            string tableNameAlias,
            string columnNameAlias,
            string joinType,
            string joinExpression)
        {
            foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder))
            {
                switch (placeholder)
                {
                case "TableName":
                    code = code.Replace("#TableName#", columnDefinition.TableName);
                    break;

                case "ColumnName":
                    code = code.Replace("#ColumnName#", columnDefinition.ColumnName);
                    break;

                case "Type":
                    code = code.Replace("#Type#", columnDefinition.TypeName.CsType());
                    break;

                case "ColumnBracket":
                    code = code.Replace("#ColumnBracket#", ColumnBracket(columnDefinition));
                    break;

                case "ColumnBrackets":
                    code = code.Replace(
                        "#ColumnBrackets#",
                        ColumnBrackets(
                            columnDefinition,
                            tableNameAlias,
                            columnNameAlias,
                            selectColumnAlias: true));
                    break;

                case "Columns":
                    code = code.Replace(
                        "#Columns#",
                        Columns(columnDefinition));
                    break;

                case "OrderByColumns":
                    code = code.Replace(
                        "#OrderByColumns#",
                        OrderByColumns(
                            columnDefinition,
                            tableNameAlias));
                    break;

                case "Alias":
                    code = code
                           .Replace("#Alias#", columnNameAlias)
                           .Replace("#BeforeAlias#", columnNameAlias.ChangePrefixNumber(-1));
                    break;

                case "As":
                    code = code.Replace(
                        "#As#",
                        !columnDefinition.ComputeColumn.IsNullOrEmpty()
                                ? "\"" + columnDefinition.ColumnName + "\""
                                : "null");
                    break;

                case "JoinTableName":
                    code = code.Replace(
                        "#JoinTableName#",
                        !columnDefinition.JoinTableName.IsNullOrEmpty()
                                ? columnDefinition.JoinTableName
                                : columnDefinition.TableName);
                    break;

                case "JoinType":
                    code = code.Replace("#JoinType#", joinType);
                    break;

                case "TableNameAlias":
                    code = code.Replace("#TableNameAlias#", " as [" + tableNameAlias + "]");
                    break;

                case "JoinExpression":
                    code = code.Replace("#JoinExpression#", joinExpression);
                    break;

                case "RecordingData":
                    code = code.Replace("#RecordingData#", columnDefinition.RecordingData);
                    break;

                case "MaxLength":
                    code = code.Replace(
                        "#MaxLength#", Column.CodeMaxLength(columnDefinition));
                    break;

                default:
                    break;
                }
            }
            if (!codeDefinition.ReplaceOld.IsNullOrEmpty())
            {
                code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew);
            }
        }
 private static bool CheckExcludeConditionsByDefName(
     CodeDefinition codeDefinition, DataContainer dataContainer)
 {
     return(!codeDefinition.Include.IsNullOrEmpty() &&
            !codeDefinition.Include.Split(',').Contains(dataContainer.DefinitionName));
 }
Exemple #28
0
 internal static bool CheckExclude(
     CodeDefinition codeDefinition,
     ColumnDefinition columnDefinition)
 {
     if (codeDefinition.NotJoin && columnDefinition.JoinTableName != string.Empty)
     {
         return(true);
     }
     if (codeDefinition.Join && columnDefinition.JoinTableName == string.Empty)
     {
         return(true);
     }
     if (codeDefinition.JoinExpression && columnDefinition.JoinExpression == string.Empty)
     {
         return(true);
     }
     if (codeDefinition.Pk && columnDefinition.Pk == 0)
     {
         return(true);
     }
     if (codeDefinition.NotPk && columnDefinition.Pk != 0)
     {
         return(true);
     }
     if (codeDefinition.Session && !columnDefinition.Session)
     {
         return(true);
     }
     if (codeDefinition.Identity && !columnDefinition.Identity)
     {
         return(true);
     }
     if (codeDefinition.NotIdentity && columnDefinition.Identity)
     {
         return(true);
     }
     if (codeDefinition.Unique && !columnDefinition.Unique)
     {
         return(true);
     }
     if (codeDefinition.NotUnique && columnDefinition.Unique)
     {
         return(true);
     }
     if (codeDefinition.NotDefault && columnDefinition.Default != string.Empty)
     {
         return(true);
     }
     if (codeDefinition.ItemId &&
         Def.ExistsModel(columnDefinition.ModelName, o => o.ItemId > 0) &&
         columnDefinition.ColumnName != columnDefinition.ModelName + "Id")
     {
         return(true);
     }
     if (codeDefinition.NotItemId &&
         Def.ExistsModel(columnDefinition.ModelName, o => o.ItemId > 0) &&
         columnDefinition.ColumnName == columnDefinition.ModelName + "Id")
     {
         return(true);
     }
     if (codeDefinition.Calc && columnDefinition.Calc == string.Empty)
     {
         return(true);
     }
     if (codeDefinition.NotCalc && columnDefinition.Calc != string.Empty)
     {
         return(true);
     }
     if (codeDefinition.NotWhereSpecial && columnDefinition.WhereSpecial)
     {
         return(true);
     }
     if (codeDefinition.SearchIndex && columnDefinition.SearchIndexPriority == 0)
     {
         return(true);
     }
     if (codeDefinition.NotByForm && columnDefinition.ByForm != string.Empty)
     {
         return(true);
     }
     if (codeDefinition.Form && columnDefinition.NotForm)
     {
         return(true);
     }
     if (codeDefinition.Select && columnDefinition.NotSelect)
     {
         return(true);
     }
     if (codeDefinition.Update && columnDefinition.NotUpdate)
     {
         return(true);
     }
     if (codeDefinition.SelectColumns && columnDefinition.SelectColumns == string.Empty)
     {
         return(true);
     }
     if (codeDefinition.NotSelectColumn && columnDefinition.SelectColumns != string.Empty)
     {
         return(true);
     }
     if (codeDefinition.ComputeColumn && columnDefinition.ComputeColumn == string.Empty)
     {
         return(true);
     }
     if (codeDefinition.NotSelectColumn && columnDefinition.ComputeColumn != string.Empty)
     {
         return(true);
     }
     if (codeDefinition.Aggregatable && !columnDefinition.Aggregatable)
     {
         return(true);
     }
     if (codeDefinition.Computable && !columnDefinition.Computable)
     {
         return(true);
     }
     if (codeDefinition.Include != string.Empty && !codeDefinition.Include.Split(',').Contains(columnDefinition.ColumnName))
     {
         return(true);
     }
     if (codeDefinition.Exclude != string.Empty && codeDefinition.Exclude.Split(',').Contains(columnDefinition.ColumnName))
     {
         return(true);
     }
     if (codeDefinition.IncludeTypeName != string.Empty && !codeDefinition.IncludeTypeName.Split(',').Contains(columnDefinition.TypeName))
     {
         return(true);
     }
     if (codeDefinition.ExcludeTypeName != string.Empty && codeDefinition.ExcludeTypeName.Split(',').Contains(columnDefinition.TypeName))
     {
         return(true);
     }
     if (codeDefinition.IncludeTypeCs != string.Empty && !codeDefinition.IncludeTypeCs.Split(',').Contains(columnDefinition.TypeCs))
     {
         return(true);
     }
     if (codeDefinition.ExcludeTypeCs != string.Empty && codeDefinition.ExcludeTypeCs.Split(',').Contains(columnDefinition.TypeCs))
     {
         return(true);
     }
     if (codeDefinition.IncludeDefaultCs != string.Empty && !codeDefinition.IncludeDefaultCs.Split(',').Contains(columnDefinition.DefaultCs))
     {
         return(true);
     }
     if (codeDefinition.ExcludeDefaultCs != string.Empty && codeDefinition.ExcludeDefaultCs.Split(',').Contains(columnDefinition.DefaultCs))
     {
         return(true);
     }
     if (codeDefinition.NotTypeCs && columnDefinition.TypeCs != string.Empty)
     {
         return(true);
     }
     if (codeDefinition.History && columnDefinition.History == 0)
     {
         return(true);
     }
     if (codeDefinition.PkHistory && columnDefinition.PkHistory == 0)
     {
         return(true);
     }
     if (codeDefinition.GridColumn && columnDefinition.GridColumn == 0)
     {
         return(true);
     }
     if (codeDefinition.FilterColumn && columnDefinition.FilterColumn == 0)
     {
         return(true);
     }
     if (codeDefinition.EditorColumn && columnDefinition.EditorColumn == 0)
     {
         return(true);
     }
     if (codeDefinition.TitleColumn && columnDefinition.TitleColumn == 0)
     {
         return(true);
     }
     if (codeDefinition.UserColumn && !columnDefinition.UserColumn)
     {
         return(true);
     }
     if (codeDefinition.NotUserColumn && columnDefinition.UserColumn)
     {
         return(true);
     }
     if (codeDefinition.EnumColumn && !columnDefinition.EnumColumn)
     {
         return(true);
     }
     if (codeDefinition.Exclude.Split(',').Contains(columnDefinition.ColumnName))
     {
         return(true);
     }
     if (codeDefinition.NotItem && Def.ExistsTable(columnDefinition.TableName, o => o.ItemId > 0))
     {
         return(true);
     }
     if (codeDefinition.ItemOnly && !Def.ExistsTable(columnDefinition.TableName, o => o.ItemId > 0))
     {
         return(true);
     }
     if (codeDefinition.GenericUi && !Def.ExistsTable(columnDefinition.TableName, o => o.GenericUi))
     {
         return(true);
     }
     if (codeDefinition.UpdateMonitor && !Def.ExistsTable(columnDefinition.TableName, o => o.UpdateMonitor))
     {
         return(true);
     }
     if (codeDefinition.ControlType != string.Empty && codeDefinition.ControlType != columnDefinition.ControlType)
     {
         return(true);
     }
     if (codeDefinition.Null && !columnDefinition.Nullable)
     {
         return(true);
     }
     if (codeDefinition.NotNull && columnDefinition.Nullable)
     {
         return(true);
     }
     if (codeDefinition.Like && !columnDefinition.Like)
     {
         return(true);
     }
     if (codeDefinition.NotBase)
     {
         if (Def.ItemModelNameCollection().Contains(columnDefinition.ModelName))
         {
             if (Def.ExistsColumnBaseItem(o =>
                                          o.ColumnName == columnDefinition.ColumnName &&
                                          !o.EachModel))
             {
                 return(true);
             }
         }
         else
         {
             if (Def.ExistsColumnBase(o =>
                                      o.ColumnName == columnDefinition.ColumnName &&
                                      !o.EachModel))
             {
                 return(true);
             }
         }
     }
     if (codeDefinition.IdentityOrPk)
     {
         if ((HasUniqueColumn(columnDefinition) && !(columnDefinition.Identity || columnDefinition.Unique)) ||
             (!HasUniqueColumn(columnDefinition) && columnDefinition.Pk == 0))
         {
             return(true);
         }
     }
     return(false);
 }
Exemple #29
0
        private void Update() //called by Unity every frame
        {
            if (!Game.Manager)
            {
                return;                //don't run update code before Game.Manager exists
            }
            BasePatches.Update(); CheatPatches.Update(); InputPatches.Update(); RunTimerPatches.Update();

            if (tooltip != null)
            {
                if (tooltipTimer.ElapsedMilliseconds > tooltipLength)
                {
                    tooltipTimer.Reset();
                    tooltip.Hide();
                    tooltip = null;
                }
            }
            //if tooltip became null, stop timer
            else
            {
                tooltipTimer.Reset();
            }

            //Check for the Return hotkey
            if (ResetKey.Value.IsDown() || ResetKey2.Value.IsDown())
            {
                if (UnloadGame())
                {
                    hasReturned             = true;
                    BasePatches.searchForMe = -111;
                    if (run != null)
                    {
                        run.reset();
                        run = null;
                    }
                }
            }

            if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))
            {
                //display the splits folder on Ctrl+S
                if (Input.GetKeyDown(KeyCode.S))
                {
                    if (Game.Manager.Ui.currentCanvas.titleCanvas)
                    {
                        System.Diagnostics.Process.Start(Directory.GetCurrentDirectory() + "/splits");
                    }

                    /*
                     * else if (run != null)
                     * {
                     *  run.save();
                     *  ShowNotif("Run saved!", 2);
                     * }*/
                    //don't allow saving midrun, could be done accidentally
                }
                //reset run on Ctrl+R
                if (Input.GetKeyDown(KeyCode.R) && run != null)
                {
                    run.reset(true);
                    ShowNotif("Run reset!", 2);
                }
                //quit run on Ctrl+Q
                if (Input.GetKeyDown(KeyCode.Q) && run != null)
                {
                    run.reset(false);
                    ShowNotif("Run quit!", 2);
                }
            }

            //if currently in a puzzle, and the status bar is up, and it's not nonstop mode, send data to autosplitters
            if (!Game.Manager.Ui.currentCanvas.titleCanvas && Game.Session && Game.Session.Puzzle.isPuzzleActive &&
                !Game.Session.gameCanvas.cellphone.isOpen && Game.Session.Puzzle.puzzleStatus.statusType != PuzzleStatusType.NONSTOP)
            {
                //this is a possibly bold but necessary assumption to make about cellphone._currentApp
                UiCellphoneAppStatus status = (UiCellphoneAppStatus)AccessTools.Field(typeof(UiCellphone), "_currentApp").GetValue(Game.Session.gameCanvas.cellphone);
                bool isBonusRound           = Game.Session.Puzzle.puzzleStatus.bonusRound;
                if (status.affectionMeter.currentValue == 0)
                {
                    startingRelationshipType = Game.Persistence.playerFile.GetPlayerFileGirlPair(Game.Session.Location.currentGirlPair).relationshipType;
                    startingCompletedPairs   = Game.Persistence.playerFile.completedGirlPairs.Count;
                }
                if (status.affectionMeter.currentValue == status.affectionMeter.maxValue &&
                    (Game.Session.gameCanvas.puzzleGrid.roundState == PuzzleRoundState.SUCCESS || isBonusRound))
                {
                    if (!splitThisDate && run != null)
                    {
                        bool didSplit = false;
                        //always split for the two tutorial splits
                        if (Game.Session.Location.currentGirlPair.girlDefinitionOne.girlName == "Kyu")
                        {
                            didSplit = run.split(isBonusRound);
                        }
                        //don't split for dates in 48 Shoes, or in postgame
                        else if (run.goal != 48 && Game.Persistence.playerFile.storyProgress < 13)
                        {
                            if (run.goal == 1 || SplitRules.Value <= 0)
                            {
                                didSplit = run.split(isBonusRound);
                            }
                            else if (SplitRules.Value == 1 && !isBonusRound)
                            {
                                didSplit = run.split(isBonusRound);
                            }
                            else if (SplitRules.Value == 2 && isBonusRound)
                            {
                                didSplit = run.split(isBonusRound);
                            }
                            //check for final split regardless of option
                            else if (isBonusRound && (run.goal == startingCompletedPairs + 1 ||
                                                      (run.goal == 25 && Game.Session.Puzzle.puzzleStatus.statusType == PuzzleStatusType.BOSS)))
                            {
                                didSplit = run.split(isBonusRound);
                            }
                        }
                        if (didSplit)
                        {
                            //initiate the timers for displaying and removing our split times
                            RunTimerPatches.initialTimerDelay.Start();
                            if (!isBonusRound)
                            {
                                RunTimerPatches.undoTimer.Start();
                            }

                            GirlPairDefinition pair = Game.Session.Location.currentGirlPair;
                            int dateNum             = 1;
                            if (startingRelationshipType == GirlPairRelationshipType.ATTRACTED)
                            {
                                dateNum = 2;
                            }
                            if (isBonusRound)
                            {
                                dateNum = 3;
                            }
                            //Kyu pair starts at ATTRACTED (2) and her bonus should be 2, not 3, so this is the easiest way
                            if (pair.girlDefinitionOne.girlName == "Kyu")
                            {
                                dateNum--;
                            }
                            if (Game.Session.Puzzle.puzzleStatus.statusType == PuzzleStatusType.BOSS)
                            {
                                dateNum = 5 - (Game.Session.Puzzle.puzzleStatus.girlListCount / 2);
                            }
                            string newSplit = pair.girlDefinitionOne.girlName + " & " + pair.girlDefinitionTwo.girlName;
                            //don't put a number on the date if they started as lovers, or it's nonstop mode? (for 100%)
                            //the storyProgress check probably makes this pointless
                            if (startingRelationshipType != GirlPairRelationshipType.LOVERS &&
                                Game.Session.Puzzle.puzzleStatus.statusType != PuzzleStatusType.NONSTOP)
                            {
                                newSplit += " #" + dateNum;
                            }
                            newSplit += "\n      " + run.splitText + "\n";
                            run.push(newSplit);

                            if (isBonusRound && pair.girlDefinitionOne.girlName != "Kyu")
                            {
                                //I think it's possible that, with a huge chain reaction, completedGirlPairs.Count might not have updated yet
                                //so use the number from before the date, +1
                                //funnily enough, that also makes the final boss's goal of "25" count
                                //but I'll leave the double-check there
                                if (run.goal == startingCompletedPairs + 1 ||
                                    (run.goal == 25 && Game.Session.Puzzle.puzzleStatus.statusType == PuzzleStatusType.BOSS))
                                {
                                    Logger.LogMessage("initiating run.save");
                                    if (run.rerollOccurred)
                                    {
                                        run.push("\n(Rerolled for Lillian)\n");
                                    }
                                    //run.save();
                                    RunTimerPatches.savePBDelay.Start();
                                }
                            }
                        }
                    }

                    if (isBonusRound)
                    {
                        BasePatches.searchForMe = 200;
                    }
                    else
                    {
                        BasePatches.searchForMe = 100;
                    }

                    splitThisDate = true;
                }

                else
                {
                    BasePatches.searchForMe = 0;
                    splitThisDate           = false;
                }
            }

            //title-screen only options, to prevent non-vanilla things happening midrun
            if (Game.Manager.Ui.currentCanvas.titleCanvas)
            {
                UiTitleCanvas tc        = (UiTitleCanvas)Game.Manager.Ui.currentCanvas;
                bool          isLoading = (bool)AccessTools.Field(typeof(UiTitleCanvas), "_loadingGame").GetValue(tc);
                //display New Version tooltip for 10 seconds
                if (newVersionAvailable && !alertedOfUpdate)
                {
                    alertedOfUpdate = true;
                    ShowTooltip("Update Available!\nClick on Credits!", 10000, 0, 45);
                }

                if (!InputPatches.codeScreen && Input.GetKeyDown(KeyCode.A))
                {
                    CodeDefinition codeDefinition = Game.Data.Codes.Get(ABIAHAIR);
                    if (!Game.Persistence.playerData.unlockedCodes.Contains(codeDefinition))
                    {
                        Game.Persistence.playerData.unlockedCodes.Add(codeDefinition);
                        ShowTooltip("Abia's Hair Enabled!", 2000);
                    }
                    else
                    {
                        Game.Persistence.playerData.unlockedCodes.Remove(codeDefinition);
                        ShowTooltip("Abia's Hair Disabled!", 2000);
                    }
                    Game.Manager.Ui.currentCanvas.GetComponent <UiTitleCanvas>().coverArt.Refresh();
                }

                //check for Kyu outfits
                if (Input.GetKey(KeyCode.K))
                {
                    bool hairstyle = (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl));
                    for (int i = (int)KeyCode.Alpha0; i <= (int)KeyCode.Alpha5; i++)
                    {
                        //Alpha0 = 48, Keypad0 = 256
                        int num = i - 48;
                        if ((Input.GetKeyDown((KeyCode)i) || Input.GetKeyDown((KeyCode)(i + 208))))
                        {
                            SetKyuOutfit(num, hairstyle);
                            string s = "Kyu ";
                            if (hairstyle)
                            {
                                s += "Hairstyle #";
                            }
                            else
                            {
                                s += "Outfit #";
                            }
                            s += num + " Chosen!";
                            ShowTooltip(s, 2000);
                        }
                    }
                }

                //check for the Cheat Mode hotkey
                if (!InputPatches.codeScreen && cheatsEnabled == false && !isLoading && CheatHotkey.Value.IsDown())
                {
                    Game.Manager.Audio.Play(AudioCategory.SOUND, Game.Manager.Ui.sfxReject);
                    PlayCheatLine();
                    Harmony.CreateAndPatchAll(typeof(CheatPatches), null);
                    CheatPatches.UnlockAllCodes();
                    ShowTooltip("Cheat Mode Activated!", 2000, 0, 30);
                    cheatsEnabled = true;
                }
            }
        }
Exemple #30
0
        internal static void ReplaceCode(
            ref string code,
            CodeDefinition codeDefinition,
            ColumnDefinition columnDefinition,
            int columnCount = 0)
        {
            foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder))
            {
                switch (placeholder)
                {
                case "ByForm":
                    code = code.ByForm(columnDefinition);
                    break;

                case "ByApi":
                    code = code.ByApi(columnDefinition);
                    break;

                case "ByDataRow":
                    code = code.ByDataRow(columnDefinition);
                    break;

                case "BySession":
                    code = code.BySession(columnDefinition);
                    break;
                }
            }
            foreach (var placeholder in code.RegexValues(CodePatterns.ReplacementPlaceholder))
            {
                switch (placeholder)
                {
                case "columnName":
                    code = code.Replace(
                        "#columnName#", columnDefinition.ColumnName.LocalalVariableName());
                    break;

                case "ColumnName":
                    code = code.Replace(
                        "#ColumnName#", columnDefinition.ColumnName.PublicVariableName());
                    break;

                case "Type":
                    code = code.Replace("#Type#", Strings.CoalesceEmpty(
                                            columnDefinition.TypeCs, columnDefinition.TypeName.CsType()));
                    break;

                case "RecordingType":
                    code = code.Replace("#RecordingType#", columnDefinition.TypeName.CsType());
                    break;

                case "RecordingData":
                    code = code.Replace("#RecordingData#", columnDefinition.RecordingData);
                    break;

                case "CastType":
                    code = code.Replace("#CastType#", columnDefinition.TypeName.CastType());
                    break;

                case "DefaultData":
                    code = code.Replace(
                        "#DefaultData#", columnDefinition.DefaultData());
                    break;

                case "InitialValue":
                    code = code.Replace(
                        "#InitialValue#",
                        columnDefinition.InitialValue());
                    break;

                case "RecordingDefaultData":
                    code = code.Replace(
                        "#RecordingDefaultData#",
                        columnDefinition.DefaultData(recordingData: true));
                    break;

                case "Hash":
                    code = code.Replace(
                        "#Hash#",
                        columnDefinition.Hash ? ".Sha512Cng()" : string.Empty);
                    break;

                case "MaxLength":
                    code = code.Replace(
                        "#MaxLength#", CodeMaxLength(columnDefinition));
                    break;

                case "Calc":
                    code = code.Replace("#Calc#", columnDefinition.Calc
                                        .Replace("#TableName#", columnDefinition.TableName)
                                        .Replace("#ModelName#", columnDefinition.ModelName));
                    break;

                case "ColumnCount":
                    code = code.Replace("#ColumnCount#", columnCount.ToString());
                    break;

                case "GridEnable":
                    code = code.Replace("#GridEnable#", columnDefinition.GridEnabled
                                        .ToOneOrZeroString());
                    break;

                default:
                    code = ReplaceCode(code, columnDefinition, placeholder);
                    break;
                }
            }
            if (codeDefinition.ReplaceOld != string.Empty)
            {
                code = code.Replace(codeDefinition.ReplaceOld, codeDefinition.ReplaceNew);
            }
        }