コード例 #1
0
        //mxd. Applies selected linededf and sidedef settings
        public void Apply(ICollection <Linedef> lines, LinedefPropertiesCopySettings settings, SidedefPropertiesCopySettings sidesettings)
        {
            List <Sidedef> frontsides = new List <Sidedef>(lines.Count);
            List <Sidedef> backsides  = new List <Sidedef>(lines.Count);

            foreach (Linedef l in lines)
            {
                if (settings.Flags)
                {
                    l.ClearFlags();
                    foreach (KeyValuePair <string, bool> f in flags)
                    {
                        l.SetFlag(f.Key, f.Value);
                    }
                }
                if (settings.Activation)
                {
                    l.Activate = activate;
                }
                if (settings.Tag)
                {
                    l.Tags = new List <int>(tags);                             //mxd
                }
                if (settings.Action)
                {
                    l.Action = action;
                }
                if (settings.Arguments)
                {
                    for (int i = 0; i < l.Args.Length; i++)
                    {
                        l.Args[i] = args[i];
                    }
                }

                if (l.Front != null)
                {
                    frontsides.Add(l.Front);
                }
                if (l.Back != null)
                {
                    backsides.Add(l.Back);
                }
            }

            // Should we bother?
            if (General.Map.UDMF)
            {
                // Apply fields
                foreach (Linedef l in lines)
                {
                    l.Fields.BeforeFieldsChange();

                    // Apply string arguments
                    if (settings.Arguments)
                    {
                        Apply(l.Fields, "arg0str");

                        //TODO: re-enable when UI part is ready
                        //Apply(l.Fields, "arg1str");
                        //Apply(l.Fields, "arg2str");
                        //Apply(l.Fields, "arg3str");
                        //Apply(l.Fields, "arg4str");
                    }

                    // Apply custom fields
                    if (settings.Fields)
                    {
                        ApplyCustomFields(l.Fields);
                    }
                }

                // Apply UI fields
                ApplyUIFields(lines, settings);
            }

            // Apply sidedef settings
            if (sidesettings != null)
            {
                if (front != null)
                {
                    front.Apply(frontsides, sidesettings);
                }
                if (back != null)
                {
                    back.Apply(backsides, sidesettings);
                }
            }
        }
コード例 #2
0
        public static bool PropertiesMatch(LinedefPropertiesCopySettings linedefflags, SidedefPropertiesCopySettings sideflags, Linedef source, Linedef target)
        {
            // Built-in properties
            if (linedefflags.Action && source.Action != target.Action)
            {
                return(false);
            }
            if (linedefflags.Activation && source.Activate != target.Activate)
            {
                return(false);
            }
            if (linedefflags.Tag && !TagsMatch(source.Tags, target.Tags))
            {
                return(false);
            }
            if (linedefflags.Arguments)
            {
                // Classic args
                for (int i = 0; i < source.Args.Length; i++)
                {
                    if (source.Args[i] != target.Args[i])
                    {
                        return(false);
                    }
                }

                // String args
                if (General.Map.UDMF)
                {
                    if (!UniFields.ValuesMatch("arg0str", source, target))
                    {
                        return(false);
                    }
                    if (!UniFields.ValuesMatch("arg1str", source, target))
                    {
                        return(false);
                    }
                    if (!UniFields.ValuesMatch("arg2str", source, target))
                    {
                        return(false);
                    }
                    if (!UniFields.ValuesMatch("arg3str", source, target))
                    {
                        return(false);
                    }
                    if (!UniFields.ValuesMatch("arg4str", source, target))
                    {
                        return(false);
                    }
                }
            }
            if (linedefflags.Flags && !FlagsMatch(source.GetEnabledFlags(), target.GetEnabledFlags()))
            {
                return(false);
            }

            if (General.Map.UDMF)
            {
                // UI fields
                if (!UIFieldsMatch(linedefflags, source, target))
                {
                    return(false);
                }

                // Custom fields
                if (linedefflags.Fields && !UniFields.CustomFieldsMatch(source.Fields, target.Fields))
                {
                    return(false);
                }
            }

            // Sidedef properties
            return((source.Front != null && target.Front != null && PropertiesMatch(sideflags, source.Front, target.Front)) ||
                   (source.Front != null && target.Back != null && PropertiesMatch(sideflags, source.Front, target.Back)) ||
                   (source.Back != null && target.Front != null && PropertiesMatch(sideflags, source.Back, target.Front)) ||
                   (source.Back != null && target.Back != null && PropertiesMatch(sideflags, source.Back, target.Back)));
        }