Beispiel #1
0
        /// <summary>
        /// Tries to read mod name and mod version from a file name.
        /// The file name can not contain an extension.
        /// </summary>
        /// <param name="fileName">The file name to parse.</param>
        /// <param name="name">Out. The parsed mod name.</param>
        /// <param name="version">Out. The parsed mod version.</param>
        /// <param name="enabled">Out. Indicates if the mod file is enabled.</param>
        /// <param name="hasUid">Specifies if the file name contains a UID.</param>
        /// <returns>Returns true if the file name was a valid mod file name, otherwise false.</returns>
        private static bool TryParseModName(string fileName, out string name, out GameCompatibleVersion version, out bool enabled, bool hasUid)
        {
            name    = null;
            version = null;

            enabled = !fileName.EndsWith(DisabledNameSuffix);
            if (!enabled)
            {
                fileName = fileName.Substring(0, fileName.Length - DisabledNameSuffix.Length);
            }

            int index = fileName.LastIndexOf('_');

            if ((index < 1) || (index >= fileName.Length - 1))
            {
                return(false);
            }

            name = fileName.Substring(0, index);
            if (hasUid)
            {
                name = GetNameWithoutUid(name);
            }
            string versionString = fileName.Substring(index + 1);

            return(GameCompatibleVersion.TryParse(versionString, out version));
        }
Beispiel #2
0
 private ModExportTemplate(int uid, string name, ExportMode exportMode, GameCompatibleVersion version, Version factorioVersion)
 {
     Uid             = uid;
     Name            = name;
     ExportMode      = exportMode;
     Version         = version;
     FactorioVersion = factorioVersion;
 }
Beispiel #3
0
 private InfoFile(string name, GameCompatibleVersion version, Version factorioVersion, string friendlyName, string author, string description, ModDependency[] dependencies)
 {
     Name            = name;
     Version         = version;
     FactorioVersion = factorioVersion;
     FriendlyName    = friendlyName;
     Author          = author;
     Description     = description;
     Dependencies    = dependencies ?? new ModDependency[0];
 }
Beispiel #4
0
        public ModDependency(string value)
        {
            if (string.IsNullOrWhiteSpace(value))
            {
                throw new ArgumentNullException(nameof(value));
            }
            value = value.Trim();

            if (value[0] == '?') // Optional
            {
                IsOptional = true;
                value      = value.Substring(1).TrimStart();
            }
            else if (value[0] == '!') // Inverted
            {
                IsInverted = true;
                value      = value.Substring(1).TrimStart();
            }
            else if (value.StartsWith("(?)")) // Optional hidden
            {
                IsOptional = true;
                IsHidden   = true;
                value      = value.Substring(3).TrimStart();
            }
            if (string.IsNullOrEmpty(value))
            {
                throw new ArgumentException("No mod name specified.", nameof(value));
            }

            HasRestriction = false;
            string[] parts = { };
            foreach (var comparison in comparisonFunctions.Keys)
            {
                parts = value.Split(new[] { comparison }, StringSplitOptions.None);
                if (parts.Length == 1)
                {
                    // Comparison not present
                    continue;
                }
                else if (parts.Length == 2)
                {
                    // Comparison present
                    HasRestriction        = true;
                    RestrictionComparison = comparison;
                    break;
                }
                else
                {
                    // Comparison present more than once
                    throw new ArgumentException("Invalid input format.", nameof(value));
                }
            }

            if (HasRestriction)
            {
                ModName = parts[0].TrimEnd();

                string versionString = parts[1].TrimStart();
                if (!GameCompatibleVersion.TryParse(versionString, out var version))
                {
                    throw new ArgumentException("Invalid input format.", nameof(value));
                }
                RestrictionVersion = version;
            }
            else
            {
                ModName = value;
            }


            // Friendly description
            var sb = new StringBuilder();

            string name = ModName;

            if (name == "base")
            {
                name = "Factorio";
            }
            sb.Append(name);

            if (HasRestriction)
            {
                sb.Append(' ');
                sb.Append(comparisonRepresentations[RestrictionComparison]);
                sb.Append(' ');
                sb.Append(RestrictionVersion);
            }

            FriendlyDescription = sb.ToString();


            // ToString
            sb.Clear();

            if (IsOptional)
            {
                sb.Append("? ");
            }
            if (IsInverted)
            {
                sb.Append('!');
            }

            sb.Append(ModName);

            if (HasRestriction)
            {
                sb.Append(' ');
                sb.Append(RestrictionComparison);
                sb.Append(' ');
                sb.Append(RestrictionVersion);
            }

            stringRepresentation = sb.ToString();
        }
 private GameCompatibleVersion GetVersionFromFile(FileSystemInfo file)
 {
     string[] parts = file.NameWithoutExtension().Split('_');
     return(GameCompatibleVersion.Parse(parts[parts.Length - 1]));
 }
Beispiel #6
0
 private ModExportTemplate(string name, GameCompatibleVersion version)
     : this(-1, name, ExportMode.Version1, version, null)
 {
 }