Ejemplo n.º 1
0
 public static clsResult BitmapIsGLCompatible(System.Drawing.Bitmap BitmapToCheck)
 {
     clsResult result2 = new clsResult("Compatability check");
     if (!modProgram.SizeIsPowerOf2(BitmapToCheck.Width))
     {
         result2.WarningAdd("Image width is not a power of 2.");
     }
     if (!modProgram.SizeIsPowerOf2(BitmapToCheck.Height))
     {
         result2.WarningAdd("Image height is not a power of 2.");
     }
     if (BitmapToCheck.Width != BitmapToCheck.Height)
     {
         result2.WarningAdd("Image is not square.");
     }
     return result2;
 }
Ejemplo n.º 2
0
 public clsResult LoadDirectory(string Path)
 {
     clsResult result3 = new clsResult("Loading tileset from \"" + Path + "\"");
     System.Drawing.Bitmap resultBitmap = null;
     modProgram.sSplitPath path = new modProgram.sSplitPath(Path);
     string slashPath = modProgram.EndWithPathSeperator(Path);
     if (path.FileTitle != "")
     {
         this.Name = path.FileTitle;
     }
     else if (path.PartCount >= 2)
     {
         this.Name = path.Parts[path.PartCount - 2];
     }
     modProgram.sResult result2 = this.Default_TileTypes_Load(slashPath + this.Name + ".ttp");
     if (!result2.Success)
     {
         result3.ProblemAdd("Loading tile types: " + result2.Problem);
         return result3;
     }
     float[] pixels = new float[4];
     int num7 = this.TileCount - 1;
     for (int i = 0; i <= num7; i++)
     {
         modBitmap.sBitmapGLTexture texture;
         string strTile = "tile-" + modProgram.MinDigits(i, 2) + ".png";
         string str = slashPath + this.Name + "-128" + Conversions.ToString(modProgram.PlatformPathSeparator) + strTile;
         if (!modBitmap.LoadBitmap(str, ref resultBitmap).Success)
         {
             return result3;
         }
         if ((resultBitmap.Width != 0x80) | (resultBitmap.Height != 0x80))
         {
             result3.WarningAdd("Tile graphic " + str + " from tileset " + this.Name + " is not 128x128.");
             return result3;
         }
         texture.Texture = resultBitmap;
         texture.MipMapLevel = 0;
         texture.MagFilter = TextureMagFilter.Nearest;
         texture.MinFilter = TextureMinFilter.Nearest;
         texture.TextureNum = 0;
         texture.Perform();
         this.Tiles[i].TextureView_GL_Texture_Num = texture.TextureNum;
         texture.MagFilter = TextureMagFilter.Nearest;
         if (modSettings.Settings.Mipmaps)
         {
             texture.MinFilter = TextureMinFilter.LinearMipmapLinear;
         }
         else
         {
             texture.MinFilter = TextureMinFilter.Nearest;
         }
         texture.TextureNum = 0;
         texture.Perform();
         this.Tiles[i].MapView_GL_Texture_Num = texture.TextureNum;
         if (modSettings.Settings.Mipmaps)
         {
             if (modSettings.Settings.MipmapsHardware)
             {
                 GL.Enable(EnableCap.Texture2D);
                 GL.GenerateMipmap(GenerateMipmapTarget.Texture2D);
                 GL.Disable(EnableCap.Texture2D);
             }
             else
             {
                 clsResult resultToAdd = this.GenerateMipMaps(slashPath, strTile, texture, i);
                 result3.Add(resultToAdd);
                 if (resultToAdd.HasProblems)
                 {
                     return result3;
                 }
             }
             GL.GetTexImage<float>(TextureTarget.Texture2D, 7, OpenTK.Graphics.OpenGL.PixelFormat.Rgba, PixelType.Float, pixels);
             this.Tiles[i].AverageColour.Red = pixels[0];
             this.Tiles[i].AverageColour.Green = pixels[1];
             this.Tiles[i].AverageColour.Blue = pixels[2];
         }
         else
         {
             int num3 = 0;
             int num2 = 0;
             int num = 0;
             int num8 = resultBitmap.Height - 1;
             for (int j = 0; j <= num8; j++)
             {
                 int num9 = resultBitmap.Width - 1;
                 for (int k = 0; k <= num9; k++)
                 {
                     Color pixel = resultBitmap.GetPixel(k, j);
                     num3 += pixel.R;
                     num2 += pixel.G;
                     num += pixel.B;
                 }
             }
             this.Tiles[i].AverageColour.Red = (float) (((double) num3) / 4177920.0);
             this.Tiles[i].AverageColour.Green = (float) (((double) num2) / 4177920.0);
             this.Tiles[i].AverageColour.Blue = (float) (((double) num) / 4177920.0);
         }
     }
     return result3;
 }
Ejemplo n.º 3
0
 public static void ZeroIDWarning(clsMap.clsUnit IDUnit, uint NewID, clsResult Output)
 {
     string text = "An object's ID has been changed from 0 to " + modIO.InvariantToString_uint(NewID) + ". Zero is not a valid ID. The object is of type " + IDUnit.Type.GetDisplayTextCode() + " and is at map position " + IDUnit.GetPosText() + ".";
     Output.WarningAdd(text);
 }
Ejemplo n.º 4
0
        public clsResult LoadDirectory(string Path)
        {
            IEnumerator enumerator;
            clsResult result3 = new clsResult("Loading object data from \"" + Path + "\"");
            Path = modProgram.EndWithPathSeperator(Path);
            string str10 = "messages" + Conversions.ToString(modProgram.PlatformPathSeparator) + "strings" + Conversions.ToString(modProgram.PlatformPathSeparator) + "names.txt";
            string str17 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "structures.txt";
            string str5 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "brain.txt";
            string str3 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "body.txt";
            string str13 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "propulsion.txt";
            string str4 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "bodypropulsionimd.txt";
            string str6 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "construction.txt";
            string str15 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "sensor.txt";
            string str14 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "repair.txt";
            string str19 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "templates.txt";
            string str21 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "weapons.txt";
            string str7 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "ecm.txt";
            string str9 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "features.txt";
            string str11 = "pies" + Conversions.ToString(modProgram.PlatformPathSeparator);
            string str16 = str11;
            string str2 = str11;
            string str12 = str11;
            string str22 = str11;
            string str20 = "texpages" + Conversions.ToString(modProgram.PlatformPathSeparator);
            string str = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "assignweapons.txt";
            string str8 = str11;
            string str18 = "stats" + Conversions.ToString(modProgram.PlatformPathSeparator) + "structureweapons.txt";
            modLists.SimpleList<clsTextFile> list = new modLists.SimpleList<clsTextFile>();
            clsTextFile file8 = new clsTextFile {
                SubDirectory = str10,
                UniqueField = 0
            };
            result3.Add(file8.LoadNamesFile(Path));
            if (!file8.CalcUniqueField())
            {
                result3.ProblemAdd("There are two entries for the same code in " + str10 + ".");
            }
            clsTextFile newItem = new clsTextFile {
                SubDirectory = str17,
                FieldCount = 0x19
            };
            list.Add(newItem);
            clsTextFile file4 = new clsTextFile {
                SubDirectory = str5,
                FieldCount = 9
            };
            list.Add(file4);
            clsTextFile file2 = new clsTextFile {
                SubDirectory = str3,
                FieldCount = 0x19
            };
            list.Add(file2);
            clsTextFile file9 = new clsTextFile {
                SubDirectory = str13,
                FieldCount = 12
            };
            list.Add(file9);
            clsTextFile file3 = new clsTextFile {
                SubDirectory = str4,
                FieldCount = 5,
                UniqueField = -1
            };
            list.Add(file3);
            clsTextFile file5 = new clsTextFile {
                SubDirectory = str6,
                FieldCount = 12
            };
            list.Add(file5);
            clsTextFile file11 = new clsTextFile {
                SubDirectory = str15,
                FieldCount = 0x10
            };
            list.Add(file11);
            clsTextFile file10 = new clsTextFile {
                SubDirectory = str14,
                FieldCount = 14
            };
            list.Add(file10);
            clsTextFile file14 = new clsTextFile {
                SubDirectory = str19,
                FieldCount = 12
            };
            list.Add(file14);
            clsTextFile file6 = new clsTextFile {
                SubDirectory = str7,
                FieldCount = 14
            };
            list.Add(file6);
            clsTextFile file7 = new clsTextFile {
                SubDirectory = str9,
                FieldCount = 11
            };
            list.Add(file7);
            clsTextFile file = new clsTextFile {
                SubDirectory = str,
                FieldCount = 5
            };
            list.Add(file);
            clsTextFile file15 = new clsTextFile {
                SubDirectory = str21,
                FieldCount = 0x35
            };
            list.Add(file15);
            clsTextFile file13 = new clsTextFile {
                SubDirectory = str18,
                FieldCount = 6
            };
            list.Add(file13);
            try
            {
                enumerator = list.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    clsTextFile current = (clsTextFile) enumerator.Current;
                    clsResult resultToAdd = current.LoadCommaFile(Path);
                    result3.Add(resultToAdd);
                    if (!resultToAdd.HasProblems)
                    {
                        if (current.CalcIsFieldCountValid())
                        {
                            if (!current.CalcUniqueField())
                            {
                                result3.ProblemAdd("An entry in field " + Conversions.ToString(current.UniqueField) + " was not unique for file " + current.SubDirectory + ".");
                            }
                        }
                        else
                        {
                            result3.ProblemAdd("There were entries with the wrong number of fields for file " + current.SubDirectory + ".");
                        }
                    }
                }
            }
            finally
            {
                if (enumerator is IDisposable)
                {
                    (enumerator as IDisposable).Dispose();
                }
            }
            if (!result3.HasProblems)
            {
                clsUnitType.clsAttachment baseAttachment;
                clsBody body;
                clsECM secm;
                string[] strArray;
                string[] strArray2;
                clsPropulsion propulsion;
                clsSensor sensor;
                string[] files;
                clsWeapon weapon;
                IEnumerator enumerator2;
                IEnumerator enumerator3;
                IEnumerator enumerator4;
                IEnumerator enumerator5;
                IEnumerator enumerator6;
                IEnumerator enumerator7;
                IEnumerator enumerator8;
                IEnumerator enumerator9;
                IEnumerator enumerator10;
                IEnumerator enumerator11;
                IEnumerator enumerator12;
                IEnumerator enumerator13;
                try
                {
                    files = Directory.GetFiles(Path + str20);
                }
                catch (Exception exception1)
                {
                    ProjectData.SetProjectError(exception1);
                    Exception exception = exception1;
                    result3.WarningAdd("Unable to access texture pages.");
                    files = new string[0];
                    ProjectData.ClearProjectError();
                }
                System.Drawing.Bitmap resultBitmap = null;
                foreach (string str23 in files)
                {
                    if (Strings.Right(str23, 4).ToLower() == ".png")
                    {
                        clsResult result5 = new clsResult("Loading texture page \"" + str23 + "\"");
                        if (File.Exists(str23))
                        {
                            modProgram.sResult result = modBitmap.LoadBitmap(str23, ref resultBitmap);
                            clsTexturePage page = new clsTexturePage();
                            if (result.Success)
                            {
                                modBitmap.sBitmapGLTexture texture;
                                result5.Take(modBitmap.BitmapIsGLCompatible(resultBitmap));
                                texture.MagFilter = TextureMagFilter.Nearest;
                                texture.MinFilter = TextureMinFilter.Nearest;
                                texture.TextureNum = 0;
                                texture.MipMapLevel = 0;
                                texture.Texture = resultBitmap;
                                texture.Perform();
                                page.GLTexture_Num = texture.TextureNum;
                            }
                            else
                            {
                                result5.WarningAdd(result.Problem);
                            }
                            int num = Strings.InStrRev(str23, Conversions.ToString(modProgram.PlatformPathSeparator), -1, CompareMethod.Binary);
                            page.FileTitle = Strings.Mid(str23, num + 1, (str23.Length - 4) - num);
                            this.TexturePages.Add(page);
                        }
                        else
                        {
                            result5.WarningAdd("Texture page missing (" + str23 + ").");
                        }
                        result3.Add(result5);
                    }
                }
                modLists.SimpleList<clsPIE> list2 = new modLists.SimpleList<clsPIE>();
                try
                {
                    strArray2 = Directory.GetFiles(Path + str11);
                }
                catch (Exception exception3)
                {
                    ProjectData.SetProjectError(exception3);
                    Exception exception2 = exception3;
                    result3.WarningAdd("Unable to access PIE files.");
                    strArray2 = new string[0];
                    ProjectData.ClearProjectError();
                }
                foreach (string str23 in strArray2)
                {
                    modProgram.sSplitPath path = new modProgram.sSplitPath(str23);
                    if (path.FileExtension.ToLower() == "pie")
                    {
                        clsPIE spie = new clsPIE {
                            Path = str23,
                            LCaseFileTitle = path.FileTitle.ToLower()
                        };
                        list2.Add(spie);
                    }
                }
                try
                {
                    enumerator2 = file2.ResultData.GetEnumerator();
                    while (enumerator2.MoveNext())
                    {
                        strArray = (string[]) enumerator2.Current;
                        body = new clsBody();
                        body.ObjectDataLink.Connect(this.Bodies);
                        body.Code = strArray[0];
                        this.SetComponentName(file8.ResultData, body, result3);
                        modIO.InvariantParse_int(strArray[6], ref body.Hitpoints);
                        body.Designable = strArray[0x18] != "0";
                        body.Attachment.Models.Add(this.GetModelForPIE(list2, strArray[7].ToLower(), result3));
                    }
                }
                finally
                {
                    if (enumerator2 is IDisposable)
                    {
                        (enumerator2 as IDisposable).Dispose();
                    }
                }
                try
                {
                    enumerator3 = file9.ResultData.GetEnumerator();
                    while (enumerator3.MoveNext())
                    {
                        strArray = (string[]) enumerator3.Current;
                        propulsion = new clsPropulsion(this.Bodies.Count);
                        propulsion.ObjectDataLink.Connect(this.Propulsions);
                        propulsion.Code = strArray[0];
                        this.SetComponentName(file8.ResultData, propulsion, result3);
                        modIO.InvariantParse_int(strArray[7], ref propulsion.HitPoints);
                        propulsion.Designable = strArray[11] != "0";
                    }
                }
                finally
                {
                    if (enumerator3 is IDisposable)
                    {
                        (enumerator3 as IDisposable).Dispose();
                    }
                }
                BodyProp[,] propArray = new BodyProp[(this.Bodies.Count - 1) + 1, (this.Propulsions.Count - 1) + 1];
                int num10 = this.Bodies.Count - 1;
                for (int i = 0; i <= num10; i++)
                {
                    int num11 = this.Propulsions.Count - 1;
                    for (int k = 0; k <= num11; k++)
                    {
                        propArray[i, k] = new BodyProp();
                        propArray[i, k].LeftPIE = "0";
                        propArray[i, k].RightPIE = "0";
                    }
                }
                try
                {
                    enumerator4 = file3.ResultData.GetEnumerator();
                    while (enumerator4.MoveNext())
                    {
                        strArray = (string[]) enumerator4.Current;
                        body = this.FindBodyCode(strArray[0]);
                        propulsion = this.FindPropulsionCode(strArray[1]);
                        if ((body != null) & (propulsion != null))
                        {
                            if (strArray[2] != "0")
                            {
                                propArray[body.ObjectDataLink.ArrayPosition, propulsion.ObjectDataLink.ArrayPosition].LeftPIE = strArray[2].ToLower();
                            }
                            if (strArray[3] != "0")
                            {
                                propArray[body.ObjectDataLink.ArrayPosition, propulsion.ObjectDataLink.ArrayPosition].RightPIE = strArray[3].ToLower();
                            }
                        }
                    }
                }
                finally
                {
                    if (enumerator4 is IDisposable)
                    {
                        (enumerator4 as IDisposable).Dispose();
                    }
                }
                int num12 = this.Propulsions.Count - 1;
                for (int j = 0; j <= num12; j++)
                {
                    propulsion = this.Propulsions[j];
                    int num13 = this.Bodies.Count - 1;
                    for (int m = 0; m <= num13; m++)
                    {
                        body = this.Bodies[m];
                        propulsion.Bodies[m].LeftAttachment = new clsUnitType.clsAttachment();
                        propulsion.Bodies[m].LeftAttachment.Models.Add(this.GetModelForPIE(list2, propArray[m, j].LeftPIE, result3));
                        propulsion.Bodies[m].RightAttachment = new clsUnitType.clsAttachment();
                        propulsion.Bodies[m].RightAttachment.Models.Add(this.GetModelForPIE(list2, propArray[m, j].RightPIE, result3));
                    }
                }
                try
                {
                    enumerator5 = file5.ResultData.GetEnumerator();
                    while (enumerator5.MoveNext())
                    {
                        strArray = (string[]) enumerator5.Current;
                        clsConstruct component = new clsConstruct();
                        component.ObjectDataLink.Connect(this.Constructors);
                        component.TurretObjectDataLink.Connect(this.Turrets);
                        component.Code = strArray[0];
                        this.SetComponentName(file8.ResultData, component, result3);
                        component.Designable = strArray[11] != "0";
                        component.Attachment.Models.Add(this.GetModelForPIE(list2, strArray[8].ToLower(), result3));
                    }
                }
                finally
                {
                    if (enumerator5 is IDisposable)
                    {
                        (enumerator5 as IDisposable).Dispose();
                    }
                }
                try
                {
                    enumerator6 = file15.ResultData.GetEnumerator();
                    while (enumerator6.MoveNext())
                    {
                        strArray = (string[]) enumerator6.Current;
                        weapon = new clsWeapon();
                        weapon.ObjectDataLink.Connect(this.Weapons);
                        weapon.TurretObjectDataLink.Connect(this.Turrets);
                        weapon.Code = strArray[0];
                        this.SetComponentName(file8.ResultData, weapon, result3);
                        modIO.InvariantParse_int(strArray[7], ref weapon.HitPoints);
                        weapon.Designable = strArray[0x33] != "0";
                        weapon.Attachment.Models.Add(this.GetModelForPIE(list2, strArray[8].ToLower(), result3));
                        weapon.Attachment.Models.Add(this.GetModelForPIE(list2, strArray[9].ToLower(), result3));
                    }
                }
                finally
                {
                    if (enumerator6 is IDisposable)
                    {
                        (enumerator6 as IDisposable).Dispose();
                    }
                }
                try
                {
                    enumerator7 = file11.ResultData.GetEnumerator();
                    while (enumerator7.MoveNext())
                    {
                        strArray = (string[]) enumerator7.Current;
                        sensor = new clsSensor();
                        sensor.ObjectDataLink.Connect(this.Sensors);
                        sensor.TurretObjectDataLink.Connect(this.Turrets);
                        sensor.Code = strArray[0];
                        this.SetComponentName(file8.ResultData, sensor, result3);
                        modIO.InvariantParse_int(strArray[7], ref sensor.HitPoints);
                        sensor.Designable = strArray[15] != "0";
                        string str27 = strArray[11].ToLower();
                        if (str27 == "turret")
                        {
                            sensor.Location = clsSensor.enumLocation.Turret;
                        }
                        else if (str27 == "default")
                        {
                            sensor.Location = clsSensor.enumLocation.Invisible;
                        }
                        else
                        {
                            sensor.Location = clsSensor.enumLocation.Invisible;
                        }
                        sensor.Attachment.Models.Add(this.GetModelForPIE(list2, strArray[8].ToLower(), result3));
                        sensor.Attachment.Models.Add(this.GetModelForPIE(list2, strArray[9].ToLower(), result3));
                    }
                }
                finally
                {
                    if (enumerator7 is IDisposable)
                    {
                        (enumerator7 as IDisposable).Dispose();
                    }
                }
                try
                {
                    enumerator8 = file10.ResultData.GetEnumerator();
                    while (enumerator8.MoveNext())
                    {
                        strArray = (string[]) enumerator8.Current;
                        clsRepair repair = new clsRepair();
                        repair.ObjectDataLink.Connect(this.Repairs);
                        repair.TurretObjectDataLink.Connect(this.Turrets);
                        repair.Code = strArray[0];
                        this.SetComponentName(file8.ResultData, repair, result3);
                        repair.Designable = strArray[13] != "0";
                        repair.Attachment.Models.Add(this.GetModelForPIE(list2, strArray[9].ToLower(), result3));
                        repair.Attachment.Models.Add(this.GetModelForPIE(list2, strArray[10].ToLower(), result3));
                    }
                }
                finally
                {
                    if (enumerator8 is IDisposable)
                    {
                        (enumerator8 as IDisposable).Dispose();
                    }
                }
                try
                {
                    enumerator9 = file4.ResultData.GetEnumerator();
                    while (enumerator9.MoveNext())
                    {
                        strArray = (string[]) enumerator9.Current;
                        clsBrain brain = new clsBrain();
                        brain.ObjectDataLink.Connect(this.Brains);
                        brain.TurretObjectDataLink.Connect(this.Turrets);
                        brain.Code = strArray[0];
                        this.SetComponentName(file8.ResultData, brain, result3);
                        brain.Designable = true;
                        weapon = this.FindWeaponCode(strArray[7]);
                        if (weapon != null)
                        {
                            brain.Weapon = weapon;
                            brain.Attachment = weapon.Attachment;
                        }
                    }
                }
                finally
                {
                    if (enumerator9 is IDisposable)
                    {
                        (enumerator9 as IDisposable).Dispose();
                    }
                }
                try
                {
                    enumerator10 = file6.ResultData.GetEnumerator();
                    while (enumerator10.MoveNext())
                    {
                        strArray = (string[]) enumerator10.Current;
                        secm = new clsECM();
                        secm.ObjectDataLink.Connect(this.ECMs);
                        secm.TurretObjectDataLink.Connect(this.Turrets);
                        secm.Code = strArray[0];
                        this.SetComponentName(file8.ResultData, secm, result3);
                        modIO.InvariantParse_int(strArray[7], ref secm.HitPoints);
                        secm.Designable = false;
                        secm.Attachment.Models.Add(this.GetModelForPIE(list2, strArray[8].ToLower(), result3));
                    }
                }
                finally
                {
                    if (enumerator10 is IDisposable)
                    {
                        (enumerator10 as IDisposable).Dispose();
                    }
                }
                try
                {
                    enumerator11 = file7.ResultData.GetEnumerator();
                    while (enumerator11.MoveNext())
                    {
                        strArray = (string[]) enumerator11.Current;
                        clsFeatureType featureType = new clsFeatureType();
                        featureType.UnitType_ObjectDataLink.Connect(this.UnitTypes);
                        featureType.FeatureType_ObjectDataLink.Connect(this.FeatureTypes);
                        featureType.Code = strArray[0];
                        if (strArray[7] == "OIL RESOURCE")
                        {
                            featureType.FeatureType = clsFeatureType.enumFeatureType.OilResource;
                        }
                        this.SetFeatureName(file8.ResultData, featureType, result3);
                        if (!modIO.InvariantParse_int(strArray[1], ref featureType.Footprint.X))
                        {
                            result3.WarningAdd("Feature footprint-x was not an integer for " + featureType.Code + ".");
                        }
                        if (!modIO.InvariantParse_int(strArray[2], ref featureType.Footprint.Y))
                        {
                            result3.WarningAdd("Feature footprint-y was not an integer for " + featureType.Code + ".");
                        }
                        featureType.BaseAttachment = new clsUnitType.clsAttachment();
                        baseAttachment = featureType.BaseAttachment;
                        name = strArray[6].ToLower();
                        baseAttachment.CreateAttachment().Models.Add(this.GetModelForPIE(list2, name, result3));
                    }
                }
                finally
                {
                    if (enumerator11 is IDisposable)
                    {
                        (enumerator11 as IDisposable).Dispose();
                    }
                }
                try
                {
                    enumerator12 = newItem.ResultData.GetEnumerator();
                    while (enumerator12.MoveNext())
                    {
                        modMath.sXY_int _int;
                        strArray = (string[]) enumerator12.Current;
                        string str25 = strArray[0];
                        string str26 = strArray[1];
                        string[] strArray4 = strArray[0x15].ToLower().Split(new char[] { '@' });
                        string str24 = strArray[0x16].ToLower();
                        if (!modIO.InvariantParse_int(strArray[5], ref _int.X))
                        {
                            result3.WarningAdd("Structure footprint-x was not an integer for " + str25 + ".");
                        }
                        if (!modIO.InvariantParse_int(strArray[6], ref _int.Y))
                        {
                            result3.WarningAdd("Structure footprint-y was not an integer for " + str25 + ".");
                        }
                        if ((str26 != "WALL") | (strArray4.GetLength(0) != 4))
                        {
                            clsStructureType structureType = new clsStructureType();
                            structureType.UnitType_ObjectDataLink.Connect(this.UnitTypes);
                            structureType.StructureType_ObjectDataLink.Connect(this.StructureTypes);
                            structureType.Code = str25;
                            this.SetStructureName(file8.ResultData, structureType, result3);
                            structureType.Footprint = _int;
                            string str28 = str26;
                            if (str28 == "DEMOLISH")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.Demolish;
                            }
                            else if (str28 == "WALL")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.Wall;
                            }
                            else if (str28 == "CORNER WALL")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.CornerWall;
                            }
                            else if (str28 == "FACTORY")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.Factory;
                            }
                            else if (str28 == "CYBORG FACTORY")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.CyborgFactory;
                            }
                            else if (str28 == "VTOL FACTORY")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.VTOLFactory;
                            }
                            else if (str28 == "COMMAND")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.Command;
                            }
                            else if (str28 == "HQ")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.HQ;
                            }
                            else if (str28 == "DEFENSE")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.Defense;
                            }
                            else if (str28 == "POWER GENERATOR")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.PowerGenerator;
                            }
                            else if (str28 == "POWER MODULE")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.PowerModule;
                            }
                            else if (str28 == "RESEARCH")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.Research;
                            }
                            else if (str28 == "RESEARCH MODULE")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.ResearchModule;
                            }
                            else if (str28 == "FACTORY MODULE")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.FactoryModule;
                            }
                            else if (str28 == "DOOR")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.DOOR;
                            }
                            else if (str28 == "REPAIR FACILITY")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.RepairFacility;
                            }
                            else if (str28 == "SAT UPLINK")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.DOOR;
                            }
                            else if (str28 == "REARM PAD")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.RearmPad;
                            }
                            else if (str28 == "MISSILE SILO")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.MissileSilo;
                            }
                            else if (str28 == "RESOURCE EXTRACTOR")
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.ResourceExtractor;
                            }
                            else
                            {
                                structureType.StructureType = clsStructureType.enumStructureType.Unknown;
                            }
                            baseAttachment = structureType.BaseAttachment;
                            if (strArray4.GetLength(0) > 0)
                            {
                                baseAttachment.Models.Add(this.GetModelForPIE(list2, strArray4[0], result3));
                            }
                            structureType.StructureBasePlate = this.GetModelForPIE(list2, str24, result3);
                            if ((baseAttachment.Models.Count == 1) && (baseAttachment.Models[0].ConnectorCount >= 1))
                            {
                                modMath.sXYZ_sng _sng = baseAttachment.Models[0].Connectors[0];
                                modLists.SimpleList<string[]> rowsWithValue = this.GetRowsWithValue(file13.ResultData, structureType.Code);
                                if (rowsWithValue.Count > 0)
                                {
                                    weapon = this.FindWeaponCode(rowsWithValue[0][1]);
                                }
                                else
                                {
                                    weapon = null;
                                }
                                secm = this.FindECMCode(strArray[0x12]);
                                sensor = this.FindSensorCode(strArray[0x13]);
                                if ((weapon != null) && (weapon.Code != "ZNULLWEAPON"))
                                {
                                    baseAttachment.CopyAttachment(weapon.Attachment).Pos_Offset = _sng;
                                }
                                if ((secm != null) && (secm.Code != "ZNULLECM"))
                                {
                                    baseAttachment.CopyAttachment(secm.Attachment).Pos_Offset = _sng;
                                }
                                if ((sensor != null) && (sensor.Code != "ZNULLSENSOR"))
                                {
                                    baseAttachment.CopyAttachment(sensor.Attachment).Pos_Offset = _sng;
                                }
                            }
                            continue;
                        }
                        clsWallType wallType = new clsWallType();
                        wallType.WallType_ObjectDataLink.Connect(this.WallTypes);
                        wallType.Code = str25;
                        this.SetWallName(file8.ResultData, wallType, result3);
                        clsModel model = this.GetModelForPIE(list2, str24, result3);
                        int index = 0;
                        do
                        {
                            clsStructureType type4 = new clsStructureType();
                            type4.UnitType_ObjectDataLink.Connect(this.UnitTypes);
                            type4.StructureType_ObjectDataLink.Connect(this.StructureTypes);
                            type4.WallLink.Connect(wallType.Segments);
                            type4.Code = str25;
                            name = wallType.Name;
                            switch (index)
                            {
                                case 0:
                                    name = name + " - ";
                                    break;

                                case 1:
                                    name = name + " + ";
                                    break;

                                case 2:
                                    name = name + " T ";
                                    break;

                                case 3:
                                    name = name + " L ";
                                    break;
                            }
                            type4.Name = name;
                            type4.Footprint = _int;
                            type4.StructureType = clsStructureType.enumStructureType.Wall;
                            baseAttachment = type4.BaseAttachment;
                            name = strArray4[index];
                            baseAttachment.Models.Add(this.GetModelForPIE(list2, name, result3));
                            type4.StructureBasePlate = model;
                            index++;
                        }
                        while (index <= 3);
                    }
                }
                finally
                {
                    if (enumerator12 is IDisposable)
                    {
                        (enumerator12 as IDisposable).Dispose();
                    }
                }
                int num2 = 0;
                try
                {
                    enumerator13 = file14.ResultData.GetEnumerator();
                    while (enumerator13.MoveNext())
                    {
                        strArray = (string[]) enumerator13.Current;
                        clsDroidTemplate template = new clsDroidTemplate();
                        template.UnitType_ObjectDataLink.Connect(this.UnitTypes);
                        template.DroidTemplate_ObjectDataLink.Connect(this.DroidTemplates);
                        template.Code = strArray[0];
                        this.SetTemplateName(file8.ResultData, template, result3);
                        string str29 = strArray[9];
                        if (str29 == "ZNULLDROID")
                        {
                            template.TemplateDroidType = modProgram.TemplateDroidType_Null;
                        }
                        else if (str29 == "DROID")
                        {
                            template.TemplateDroidType = modProgram.TemplateDroidType_Droid;
                        }
                        else if (str29 == "CYBORG")
                        {
                            template.TemplateDroidType = modProgram.TemplateDroidType_Cyborg;
                        }
                        else if (str29 == "CYBORG_CONSTRUCT")
                        {
                            template.TemplateDroidType = modProgram.TemplateDroidType_CyborgConstruct;
                        }
                        else if (str29 == "CYBORG_REPAIR")
                        {
                            template.TemplateDroidType = modProgram.TemplateDroidType_CyborgRepair;
                        }
                        else if (str29 == "CYBORG_SUPER")
                        {
                            template.TemplateDroidType = modProgram.TemplateDroidType_CyborgSuper;
                        }
                        else if (str29 == "TRANSPORTER")
                        {
                            template.TemplateDroidType = modProgram.TemplateDroidType_Transporter;
                        }
                        else if (str29 == "PERSON")
                        {
                            template.TemplateDroidType = modProgram.TemplateDroidType_Person;
                        }
                        else
                        {
                            template.TemplateDroidType = null;
                            result3.WarningAdd("Template " + template.GetDisplayTextCode() + " had an unrecognised type.");
                        }
                        clsDroidDesign.sLoadPartsArgs args = new clsDroidDesign.sLoadPartsArgs {
                            Body = this.FindBodyCode(strArray[2]),
                            Brain = this.FindBrainCode(strArray[3]),
                            Construct = this.FindConstructorCode(strArray[4]),
                            ECM = this.FindECMCode(strArray[5]),
                            Propulsion = this.FindPropulsionCode(strArray[7]),
                            Repair = this.FindRepairCode(strArray[8]),
                            Sensor = this.FindSensorCode(strArray[10])
                        };
                        modLists.SimpleList<string[]> list4 = this.GetRowsWithValue(file.ResultData, template.Code);
                        if (list4.Count > 0)
                        {
                            name = list4[0][1];
                            if (name != "NULL")
                            {
                                args.Weapon1 = this.FindWeaponCode(name);
                            }
                            name = list4[0][2];
                            if (name != "NULL")
                            {
                                args.Weapon2 = this.FindWeaponCode(name);
                            }
                            name = list4[0][3];
                            if (name != "NULL")
                            {
                                args.Weapon3 = this.FindWeaponCode(name);
                            }
                        }
                        if (!template.LoadParts(args))
                        {
                            if (num2 < 0x10)
                            {
                                result3.WarningAdd("Template " + template.GetDisplayTextCode() + " had multiple conflicting turrets.");
                            }
                            num2++;
                        }
                    }
                }
                finally
                {
                    if (enumerator13 is IDisposable)
                    {
                        (enumerator13 as IDisposable).Dispose();
                    }
                }
                if (num2 > 0)
                {
                    result3.WarningAdd(Conversions.ToString(num2) + " templates had multiple conflicting turrets.");
                }
            }
            return result3;
        }
Ejemplo n.º 5
0
 private clsResult ValidateMap()
 {
     clsStructureType type;
     IEnumerator enumerator;
     IEnumerator enumerator2;
     clsResult result = new clsResult("Validate map");
     if (this.Map.Terrain.TileSize.X > 250)
     {
         result.WarningAdd("Map width is too large. The maximum is " + Conversions.ToString(250) + ".");
     }
     if (this.Map.Terrain.TileSize.Y > 250)
     {
         result.WarningAdd("Map height is too large. The maximum is " + Conversions.ToString(250) + ".");
     }
     if (this.Map.Tileset == null)
     {
         result.ProblemAdd("No tileset selected.");
     }
     int[,] numArray = new int[10, (modProgram.ObjectData.StructureTypes.Count - 1) + 1];
     int[] numArray2 = new int[(modProgram.ObjectData.StructureTypes.Count - 1) + 1];
     try
     {
         enumerator = this.Map.Units.GetEnumerator();
         while (enumerator.MoveNext())
         {
             clsMap.clsUnit current = (clsMap.clsUnit) enumerator.Current;
             if (current.Type.Type == clsUnitType.enumType.PlayerStructure)
             {
                 int arrayPosition;
                 type = (clsStructureType) current.Type;
                 if (current.UnitGroup == this.Map.ScavengerUnitGroup)
                 {
                     int[] numArray3 = numArray2;
                     arrayPosition = type.StructureType_ObjectDataLink.ArrayPosition;
                     numArray3[arrayPosition]++;
                 }
                 else
                 {
                     int[,] numArray4 = numArray;
                     arrayPosition = current.UnitGroup.WZ_StartPos;
                     int num4 = type.StructureType_ObjectDataLink.ArrayPosition;
                     numArray4[arrayPosition, num4]++;
                 }
             }
         }
     }
     finally
     {
         if (enumerator is IDisposable)
         {
             (enumerator as IDisposable).Dispose();
         }
     }
     try
     {
         enumerator2 = modProgram.ObjectData.StructureTypes.GetEnumerator();
         while (enumerator2.MoveNext())
         {
             type = (clsStructureType) enumerator2.Current;
             int index = type.StructureType_ObjectDataLink.ArrayPosition;
             int num = 0;
             do
             {
                 if (numArray[num, index] > 0xff)
                 {
                     result.ProblemAdd("Player " + Conversions.ToString(num) + " has too many (" + Conversions.ToString(numArray[num, index]) + ") of structure \"" + type.Code + "\". The limit is 255 of any one structure type.");
                 }
                 num++;
             }
             while (num <= 9);
             if (numArray2[index] > 0xff)
             {
                 result.ProblemAdd("Scavengers have too many (" + Conversions.ToString(numArray2[index]) + ") of structure \"" + type.Code + "\". The limit is 255 of any one structure type.");
             }
         }
     }
     finally
     {
         if (enumerator2 is IDisposable)
         {
             (enumerator2 as IDisposable).Dispose();
         }
     }
     return result;
 }
Ejemplo n.º 6
0
 private void btnCompileCampaign_Click(object sender, EventArgs e)
 {
     clsResult result = new clsResult("Compile campaign");
     this.SaveToMap();
     int num = this.ValidateMap_WaterTris();
     if (num > 0)
     {
         result.WarningAdd(Conversions.ToString(num) + " water tiles have an incorrect triangle direction. There might be in-game graphical glitches on those tiles.");
     }
     result.Add(this.ValidateMap());
     result.Add(this.ValidateMap_UnitPositions());
     string text = this.txtName.Text;
     if (text.Length < 1)
     {
         result.ProblemAdd("Enter a name for the campaign files.");
     }
     int selectedIndex = this.cboCampType.SelectedIndex;
     if ((selectedIndex < 0) | (selectedIndex > 2))
     {
         result.ProblemAdd("Select a campaign type.");
     }
     if (result.HasProblems)
     {
         modProgram.ShowWarnings(result);
     }
     else
     {
         FolderBrowserDialog dialog = new FolderBrowserDialog();
         if (dialog.ShowDialog(this) == DialogResult.OK)
         {
             clsMap.sWrite_WZ_Args args = new clsMap.sWrite_WZ_Args {
                 MapName = text,
                 Path = dialog.SelectedPath,
                 Overwrite = false
             };
             this.SetScrollLimits(ref args.ScrollMin, ref args.ScrollMax);
             args.Campaign = new clsMap.sWrite_WZ_Args.clsCampaign();
             args.Campaign.GAMType = (uint) selectedIndex;
             args.CompileType = clsMap.sWrite_WZ_Args.enumCompileType.Campaign;
             result.Add(this.Map.Write_WZ(args));
             modProgram.ShowWarnings(result);
             if (!result.HasWarnings)
             {
                 this.Close();
             }
         }
     }
 }
Ejemplo n.º 7
0
 public void SetComponentName(modLists.SimpleList<string[]> Names, clsComponent Component, clsResult Result)
 {
     modLists.SimpleList<string[]> rowsWithValue = this.GetRowsWithValue(Names, Component.Code);
     if (rowsWithValue.Count == 0)
     {
         Result.WarningAdd("No name for component " + Component.Code + ".");
     }
     else
     {
         Component.Name = rowsWithValue[0][1];
     }
 }
Ejemplo n.º 8
0
 public clsResult GenerateUnits()
 {
     int num;
     int num3;
     int num5;
     int num7;
     modMath.sXY_int _int;
     uint num12;
     int num13;
     clsMap.clsUnit unit;
     uint num14;
     clsResult result2 = new clsResult("Objects");
     int maxDistFromPos = 0x300;
     int num4 = 0x800;
     clsMap.clsTerrain terrain = this.Map.Terrain;
     int num15 = this.PassageNodeCount - 1;
     for (num = 0; num <= num15; num++)
     {
         int num16 = this.SymmetryBlockCount - 1;
         num3 = 0;
         while (num3 <= num16)
         {
             this.PassageNodes[num3, num].HasFeatureCluster = false;
             num3++;
         }
     }
     int num17 = this.TotalPlayerCount - 1;
     for (num = 0; num <= num17; num++)
     {
         int num11 = num;
         if (this.PlaceUnitNear(modGenerator.UnitType_CommandCentre, this.PlayerBases[num].Pos, this.Map.UnitGroups[num11], 3, 0, num4) == null)
         {
             result2.ProblemAdd("No room for base structures");
             return result2;
         }
         unit = this.PlaceUnitNear(modGenerator.UnitType_PowerGenerator, this.PlayerBases[num].Pos, this.Map.UnitGroups[num11], 3, 0, num4);
         if (unit == null)
         {
             result2.ProblemAdd("No room for base structures.");
             return result2;
         }
         if (this.PlaceUnit(modGenerator.UnitType_PowerModule, unit.Pos, this.Map.UnitGroups[num11], 0) == null)
         {
             result2.ProblemAdd("No room for module.");
             return result2;
         }
         num3 = 1;
         do
         {
             unit = this.PlaceUnitNear(modGenerator.UnitType_ResearchFacility, this.PlayerBases[num].Pos, this.Map.UnitGroups[num11], 3, 0, num4);
             if (unit == null)
             {
                 result2.ProblemAdd("No room for base structures");
                 return result2;
             }
             if (this.PlaceUnit(modGenerator.UnitType_ResearchModule, unit.Pos, this.Map.UnitGroups[num11], 0) == null)
             {
                 result2.ProblemAdd("No room for module.");
                 return result2;
             }
             num3++;
         }
         while (num3 <= 2);
         num3 = 1;
         do
         {
             unit = this.PlaceUnitNear(modGenerator.UnitType_Factory, this.PlayerBases[num].Pos, this.Map.UnitGroups[num11], 4, 0, num4);
             if (unit == null)
             {
                 result2.ProblemAdd("No room for base structures");
                 return result2;
             }
             if (this.PlaceUnit(modGenerator.UnitType_FactoryModule, unit.Pos, this.Map.UnitGroups[num11], 0) == null)
             {
                 result2.ProblemAdd("No room for module.");
                 return result2;
             }
             num3++;
         }
         while (num3 <= 2);
         if (this.PlaceUnitNear(modGenerator.UnitType_CyborgFactory, this.PlayerBases[num].Pos, this.Map.UnitGroups[num11], 3, 0, num4) == null)
         {
             result2.ProblemAdd("No room for base structures");
             return result2;
         }
         int baseTruckCount = this.BaseTruckCount;
         num3 = 1;
         while (num3 <= baseTruckCount)
         {
             if (this.PlaceUnitNear(modGenerator.UnitType_Truck, this.PlayerBases[num].Pos, this.Map.UnitGroups[num11], 2, 0, num4) == null)
             {
                 result2.ProblemAdd("No room for trucks");
                 return result2;
             }
             num3++;
         }
     }
     int num19 = this.PassageNodeCount - 1;
     for (num = 0; num <= num19; num++)
     {
         int num20 = this.SymmetryBlockCount - 1;
         num7 = 0;
         while (num7 <= num20)
         {
             int num21 = this.PassageNodes[num7, num].OilCount - 1;
             num3 = 0;
             while (num3 <= num21)
             {
                 modMath.sXY_int _int2;
                 if (this.PassageNodes[num7, num].PlayerBaseNum >= 0)
                 {
                     unit = this.PlaceUnitNear(modGenerator.UnitType_OilResource, this.PassageNodes[num7, num].Pos, this.Map.ScavengerUnitGroup, 2, 0, num4);
                 }
                 else
                 {
                     unit = this.PlaceUnitNear(modGenerator.UnitType_OilResource, this.PassageNodes[num7, num].Pos, this.Map.ScavengerUnitGroup, 2, 0, maxDistFromPos);
                 }
                 if (unit == null)
                 {
                     result2.ProblemAdd("No room for oil.");
                     return result2;
                 }
                 _int2.X = (int) Math.Round(((double) (((double) unit.Pos.Horizontal.X) / 128.0)));
                 _int2.Y = (int) Math.Round(((double) (((double) unit.Pos.Horizontal.Y) / 128.0)));
                 byte num2 = (byte) Math.Round((double) (((double) (((terrain.Vertices[_int2.X, _int2.Y].Height + terrain.Vertices[_int2.X + 1, _int2.Y].Height) + terrain.Vertices[_int2.X, _int2.Y + 1].Height) + terrain.Vertices[_int2.X + 1, _int2.Y + 1].Height)) / 4.0));
                 terrain.Vertices[_int2.X, _int2.Y].Height = num2;
                 terrain.Vertices[_int2.X + 1, _int2.Y].Height = num2;
                 terrain.Vertices[_int2.X, _int2.Y + 1].Height = num2;
                 terrain.Vertices[_int2.X + 1, _int2.Y + 1].Height = num2;
                 this.Map.SectorGraphicsChanges.TileChanged(_int2);
                 this.Map.SectorUnitHeightsChanges.TileChanged(_int2);
                 this.Map.SectorTerrainUndoChanges.TileChanged(_int2);
                 unit.Pos.Altitude = num2 * this.Map.HeightMultiplier;
                 if ((this.PassageNodes[num7, num].PlayerBaseNum >= 0) && (this.PlaceUnit(modGenerator.UnitType_Derrick, unit.Pos, this.Map.UnitGroups[this.PassageNodes[num7, num].PlayerBaseNum], 0) == null))
                 {
                     result2.ProblemAdd("No room for derrick.");
                     return result2;
                 }
                 num3++;
             }
             num7++;
         }
     }
     int num22 = this.PassageNodeCount - 1;
     for (num = 0; num <= num22; num++)
     {
         int num23 = this.SymmetryBlockCount - 1;
         num7 = 0;
         while (num7 <= num23)
         {
             if ((this.PassageNodes[num7, num].PlayerBaseNum < 0) & !this.PassageNodes[num7, num].IsOnBorder)
             {
                 this.PassageNodes[num7, num].HasFeatureCluster = App.Random.Next() < this.FeatureClusterChance;
             }
             num7++;
         }
     }
     int num10 = 0;
     if (this.GenerateTileset.ClusteredUnitChanceTotal > 0)
     {
         int num24 = this.PassageNodeCount - 1;
         for (num = 0; num <= num24; num++)
         {
             int num25 = this.SymmetryBlockCount - 1;
             for (num7 = 0; num7 <= num25; num7++)
             {
                 if (this.PassageNodes[num7, num].HasFeatureCluster)
                 {
                     int num6 = this.FeatureClusterMinUnits + ((int) Math.Round((double) ((float) (App.Random.Next() * ((this.FeatureClusterMaxUnits - this.FeatureClusterMinUnits) + 1)))));
                     int num26 = num6;
                     num3 = 1;
                     while (num3 <= num26)
                     {
                         num12 = (uint) Math.Round(((double) (App.Random.Next() * this.GenerateTileset.ClusteredUnitChanceTotal)));
                         num14 = 0;
                         int num27 = this.GenerateTileset.ClusteredUnitCount - 1;
                         num5 = 0;
                         while (num5 <= num27)
                         {
                             num14 += this.GenerateTileset.ClusteredUnits[num5].Chance;
                             if (num12 < num14)
                             {
                                 break;
                             }
                             num5++;
                         }
                         num13 = 0;
                         _int = this.GenerateTileset.ClusteredUnits[num5].Type.get_GetFootprintSelected(num13);
                         int clearance = ((int) Math.Round(Math.Ceiling((double) (((float) Math.Max(_int.X, _int.Y)) / 2f)))) + 1;
                         if (this.PlaceUnitNear(this.GenerateTileset.ClusteredUnits[num5].Type, this.PassageNodes[num7, num].Pos, this.Map.ScavengerUnitGroup, clearance, num13, maxDistFromPos) == null)
                         {
                             num10 += (num6 - num3) + 1;
                             break;
                         }
                         num3++;
                     }
                 }
             }
         }
         if (num10 > 0)
         {
             result2.WarningAdd("Not enough space for " + Conversions.ToString(num10) + " clustered objects.");
         }
     }
     if (this.TilePathMap.get_GetNodeLayer(this.TilePathMap.GetNodeLayerCount - 1).GetNodeCount != 1)
     {
         result2.ProblemAdd("Error: bad node count on top layer!");
         return result2;
     }
     if (this.GenerateTileset.ScatteredUnitChanceTotal > 0)
     {
         int featureScatterCount = this.FeatureScatterCount;
         num = 1;
         while (num <= featureScatterCount)
         {
             num12 = (uint) Math.Round(((double) (App.Random.Next() * this.GenerateTileset.ScatteredUnitChanceTotal)));
             num14 = 0;
             int num29 = this.GenerateTileset.ScatteredUnitCount - 1;
             num5 = 0;
             while (num5 <= num29)
             {
                 num14 += this.GenerateTileset.ScatteredUnits[num5].Chance;
                 if (num12 < num14)
                 {
                     break;
                 }
                 num5++;
             }
             num13 = 0;
             _int = this.GenerateTileset.ScatteredUnits[num5].Type.get_GetFootprintSelected(num13);
             num3 = this.FeatureScatterGap + ((int) Math.Round(Math.Ceiling((double) (((float) Math.Max(_int.X, _int.Y)) / 2f))));
             PathfinderNode randomChildNode = this.GetRandomChildNode(this.TilePathMap.get_GetNodeLayer(this.TilePathMap.GetNodeLayerCount - 1).get_GetNode(0), num3);
             if (randomChildNode == null)
             {
                 break;
             }
             clsNodeTag tag = (clsNodeTag) randomChildNode.Tag;
             if (this.PlaceUnitNear(this.GenerateTileset.ScatteredUnits[num5].Type, tag.Pos, this.Map.ScavengerUnitGroup, num3, num13, maxDistFromPos) == null)
             {
                 break;
             }
             num++;
         }
         if (num < (this.FeatureScatterCount + 1))
         {
             result2.WarningAdd("Only enough space for " + Conversions.ToString((int) (num - 1)) + " scattered objects.");
         }
     }
     return result2;
 }
Ejemplo n.º 9
0
            public clsResult Translate(int SectionNum, clsINIRead.clsSectionTranslator Translator, ref clsINIRead.sErrorCount ErrorCount)
            {
                clsResult result = new clsResult("Section " + this.Name);
                int num2 = this.Properties.Count - 1;
                for (int i = 0; i <= num2; i++)
                {
                    sProperty property;
                    switch (Translator.Translate(SectionNum, this.Properties[i]))
                    {
                        case clsINIRead.enumTranslatorResult.NameUnknown:
                            if (ErrorCount.NameErrorCount < 0x10)
                            {
                                property = this.Properties[i];
                                result.WarningAdd("Property name \"" + property.Name + "\" is unknown.");
                            }
                            ErrorCount.NameErrorCount++;
                            break;

                        case clsINIRead.enumTranslatorResult.ValueInvalid:
                            if (ErrorCount.ValueErrorCount < 0x10)
                            {
                                string[] strArray = new string[5];
                                strArray[0] = "Value \"";
                                sProperty property2 = this.Properties[i];
                                strArray[1] = property2.Value;
                                strArray[2] = "\" for property name \"";
                                property = this.Properties[i];
                                strArray[3] = property.Name;
                                strArray[4] = "\" is not valid.";
                                result.WarningAdd(string.Concat(strArray));
                            }
                            ErrorCount.ValueErrorCount++;
                            break;
                    }
                }
                return result;
            }
Ejemplo n.º 10
0
 public clsResult ReadFile(StreamReader File)
 {
     clsResult result2 = new clsResult("Reading INI");
     int num3 = 0;
     int num2 = -1;
     string str = null;
     this.RootSection = new clsSection();
     while (true)
     {
         str = File.ReadLine();
         if (str == null)
         {
             this.Sections.RemoveBuffer();
             if (num3 > 0)
             {
                 result2.WarningAdd("There were " + Conversions.ToString(num3) + " invalid lines that were ignored.");
             }
             return result2;
         }
         str = str.Trim();
         int index = str.IndexOf('#');
         if (index >= 0)
         {
             str = Strings.Left(str, index).Trim();
         }
         if (str.Length < 2)
         {
             if (str.Length > 0)
             {
                 num3++;
             }
         }
         else if (str[0] != '[')
         {
             if (num2 >= 0)
             {
                 index = str.IndexOf('=');
                 if (index >= 0)
                 {
                     this.Sections[num2].CreateProperty(str.Substring(0, index).ToLower().Trim(), str.Substring(index + 1, (str.Length - index) - 1).Trim());
                 }
                 else
                 {
                     num3++;
                 }
             }
             else
             {
                 index = str.IndexOf('=');
                 if (index >= 0)
                 {
                     this.RootSection.CreateProperty(str.Substring(0, index).ToLower().Trim(), str.Substring(index + 1, (str.Length - index) - 1).Trim());
                 }
                 else
                 {
                     num3++;
                 }
             }
         }
         else if (str[str.Length - 1] != ']')
         {
             num3++;
         }
         else
         {
             string name = str.Substring(1, str.Length - 2);
             int num4 = this.Sections.Count - 1;
             index = 0;
             while (index <= num4)
             {
                 if (this.Sections[index].Name == name)
                 {
                     break;
                 }
                 index++;
             }
             num2 = index;
             if (num2 == this.Sections.Count)
             {
                 this.CreateSection(name);
             }
         }
     }
 }
Ejemplo n.º 11
0
            public clsResult Translate(clsINIRead.clsTranslator Translator)
            {
                clsINIRead.sErrorCount count;
                clsResult result = new clsResult("Section " + this.Name);
                count.NameWarningCountMax = 0x10;
                count.ValueWarningCountMax = 0x10;
                int num2 = this.Properties.Count - 1;
                for (int i = 0; i <= num2; i++)
                {
                    sProperty property;
                    switch (Translator.Translate(this.Properties[i]))
                    {
                        case clsINIRead.enumTranslatorResult.NameUnknown:
                            if (count.NameErrorCount < 0x10)
                            {
                                property = this.Properties[i];
                                result.WarningAdd("Property name \"" + property.Name + "\" is unknown.");
                            }
                            count.NameErrorCount++;
                            break;

                        case clsINIRead.enumTranslatorResult.ValueInvalid:
                            if (count.ValueErrorCount < 0x10)
                            {
                                string[] strArray = new string[5];
                                strArray[0] = "Value \"";
                                sProperty property2 = this.Properties[i];
                                strArray[1] = property2.Value;
                                strArray[2] = "\" for property name \"";
                                property = this.Properties[i];
                                strArray[3] = property.Name;
                                strArray[4] = "\" is not valid.";
                                result.WarningAdd(string.Concat(strArray));
                            }
                            count.ValueErrorCount++;
                            break;
                    }
                }
                if (count.NameErrorCount > count.NameWarningCountMax)
                {
                    result.WarningAdd("There were " + Conversions.ToString(count.NameErrorCount) + " unknown property names that were ignored.");
                }
                if (count.ValueErrorCount > count.ValueWarningCountMax)
                {
                    result.WarningAdd("There were " + Conversions.ToString(count.ValueErrorCount) + " invalid values that were ignored.");
                }
                return result;
            }
Ejemplo n.º 12
0
 public clsResult ReadFile(StreamReader File)
 {
     clsResult result2 = new clsResult("");
     int num3 = 0;
     string str = null;
     Label_0012:
     str = File.ReadLine();
     if (str != null)
     {
         str = str.Trim();
         int index = str.IndexOf('#');
         if (index >= 0)
         {
             str = Strings.Left(str, index).Trim();
         }
         if (str.Length >= 1)
         {
             index = str.IndexOf('=');
             if (index >= 0)
             {
                 this.CreateProperty(str.Substring(0, index).ToLower().Trim(), str.Substring(index + 1, (str.Length - index) - 1).Trim());
             }
             else
             {
                 num3++;
             }
         }
         else if (str.Length > 0)
         {
             num3++;
         }
         goto Label_0012;
     }
     this.Properties.RemoveBuffer();
     if (num3 > 0)
     {
         result2.WarningAdd("There were " + Conversions.ToString(num3) + " invalid lines that were ignored.");
     }
     return result2;
 }
Ejemplo n.º 13
0
 public clsResult Translate(clsSectionTranslator Translator)
 {
     sErrorCount count;
     clsResult result = new clsResult("Translating INI");
     count.NameWarningCountMax = 0x10;
     count.ValueWarningCountMax = 0x10;
     int num2 = this.Sections.Count - 1;
     for (int i = 0; i <= num2; i++)
     {
         result.Add(this.Sections[i].Translate(i, Translator, ref count));
     }
     if (count.NameErrorCount > count.NameWarningCountMax)
     {
         result.WarningAdd("There were " + Conversions.ToString(count.NameErrorCount) + " unknown property names that were ignored.");
     }
     if (count.ValueErrorCount > count.ValueWarningCountMax)
     {
         result.WarningAdd("There were " + Conversions.ToString(count.ValueErrorCount) + " invalid values that were ignored.");
     }
     return result;
 }
Ejemplo n.º 14
0
 public clsResult GenerateMipMaps(string SlashPath, string strTile, modBitmap.sBitmapGLTexture BitmapTextureArgs, int TileNum)
 {
     int num;
     int num2;
     Color pixel;
     Color color2;
     Color color3;
     Color color4;
     int num3;
     int num5;
     int num6;
     int num7;
     int num8;
     int num9;
     clsResult result3 = new clsResult("Generating mipmaps");
     System.Drawing.Bitmap resultBitmap = null;
     string path = SlashPath + this.Name + "-64" + Conversions.ToString(modProgram.PlatformPathSeparator) + strTile;
     modProgram.sResult result2 = modBitmap.LoadBitmap(path, ref resultBitmap);
     if (!result2.Success)
     {
         result3.WarningAdd("Unable to load tile graphic: " + result2.Problem);
         return result3;
     }
     if ((resultBitmap.Width != 0x40) | (resultBitmap.Height != 0x40))
     {
         result3.WarningAdd("Tile graphic " + path + " from tileset " + this.Name + " is not 64x64.");
         return result3;
     }
     BitmapTextureArgs.Texture = resultBitmap;
     BitmapTextureArgs.MipMapLevel = 1;
     BitmapTextureArgs.Perform();
     path = SlashPath + this.Name + "-32" + Conversions.ToString(modProgram.PlatformPathSeparator) + strTile;
     result2 = modBitmap.LoadBitmap(path, ref resultBitmap);
     if (!result2.Success)
     {
         result3.WarningAdd("Unable to load tile graphic: " + result2.Problem);
         return result3;
     }
     if ((resultBitmap.Width != 0x20) | (resultBitmap.Height != 0x20))
     {
         result3.WarningAdd("Tile graphic " + path + " from tileset " + this.Name + " is not 32x32.");
         return result3;
     }
     BitmapTextureArgs.Texture = resultBitmap;
     BitmapTextureArgs.MipMapLevel = 2;
     BitmapTextureArgs.Perform();
     path = SlashPath + this.Name + "-16" + Conversions.ToString(modProgram.PlatformPathSeparator) + strTile;
     result2 = modBitmap.LoadBitmap(path, ref resultBitmap);
     if (!result2.Success)
     {
         result3.WarningAdd("Unable to load tile graphic: " + result2.Problem);
         return result3;
     }
     if ((resultBitmap.Width != 0x10) | (resultBitmap.Height != 0x10))
     {
         result3.WarningAdd("Tile graphic " + path + " from tileset " + this.Name + " is not 16x16.");
         return result3;
     }
     BitmapTextureArgs.Texture = resultBitmap;
     BitmapTextureArgs.MipMapLevel = 3;
     BitmapTextureArgs.Perform();
     System.Drawing.Bitmap bitmap5 = new System.Drawing.Bitmap(8, 8, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
     int y = 0;
     do
     {
         num8 = y * 2;
         num9 = num8 + 1;
         num3 = 0;
         do
         {
             num6 = num3 * 2;
             num7 = num6 + 1;
             pixel = resultBitmap.GetPixel(num6, num8);
             color2 = resultBitmap.GetPixel(num7, num8);
             color3 = resultBitmap.GetPixel(num6, num9);
             color4 = resultBitmap.GetPixel(num7, num9);
             num5 = (int) Math.Round((double) (((float) (((pixel.R + color2.R) + color3.R) + color4.R)) / 4f));
             num2 = (int) Math.Round((double) (((float) (((pixel.G + color2.G) + color3.G) + color4.G)) / 4f));
             num = (int) Math.Round((double) (((float) (((pixel.B + color2.B) + color3.B) + color4.B)) / 4f));
             bitmap5.SetPixel(num3, y, ColorTranslator.FromOle(modColour.OSRGB(num5, num2, num)));
             num3++;
         }
         while (num3 <= 7);
         y++;
     }
     while (y <= 7);
     BitmapTextureArgs.Texture = bitmap5;
     BitmapTextureArgs.MipMapLevel = 4;
     BitmapTextureArgs.Perform();
     resultBitmap = bitmap5;
     System.Drawing.Bitmap bitmap4 = new System.Drawing.Bitmap(4, 4, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
     y = 0;
     do
     {
         num8 = y * 2;
         num9 = num8 + 1;
         num3 = 0;
         do
         {
             num6 = num3 * 2;
             num7 = num6 + 1;
             pixel = resultBitmap.GetPixel(num6, num8);
             color2 = resultBitmap.GetPixel(num7, num8);
             color3 = resultBitmap.GetPixel(num6, num9);
             color4 = resultBitmap.GetPixel(num7, num9);
             num5 = (int) Math.Round((double) (((float) (((pixel.R + color2.R) + color3.R) + color4.R)) / 4f));
             num2 = (int) Math.Round((double) (((float) (((pixel.G + color2.G) + color3.G) + color4.G)) / 4f));
             num = (int) Math.Round((double) (((float) (((pixel.B + color2.B) + color3.B) + color4.B)) / 4f));
             bitmap4.SetPixel(num3, y, ColorTranslator.FromOle(modColour.OSRGB(num5, num2, num)));
             num3++;
         }
         while (num3 <= 3);
         y++;
     }
     while (y <= 3);
     BitmapTextureArgs.Texture = bitmap4;
     BitmapTextureArgs.MipMapLevel = 5;
     BitmapTextureArgs.Perform();
     resultBitmap = bitmap4;
     System.Drawing.Bitmap bitmap3 = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
     y = 0;
     do
     {
         num8 = y * 2;
         num9 = num8 + 1;
         num3 = 0;
         do
         {
             num6 = num3 * 2;
             num7 = num6 + 1;
             pixel = resultBitmap.GetPixel(num6, num8);
             color2 = resultBitmap.GetPixel(num7, num8);
             color3 = resultBitmap.GetPixel(num6, num9);
             color4 = resultBitmap.GetPixel(num7, num9);
             num5 = (int) Math.Round((double) (((float) (((pixel.R + color2.R) + color3.R) + color4.R)) / 4f));
             num2 = (int) Math.Round((double) (((float) (((pixel.G + color2.G) + color3.G) + color4.G)) / 4f));
             num = (int) Math.Round((double) (((float) (((pixel.B + color2.B) + color3.B) + color4.B)) / 4f));
             bitmap3.SetPixel(num3, y, ColorTranslator.FromOle(modColour.OSRGB(num5, num2, num)));
             num3++;
         }
         while (num3 <= 1);
         y++;
     }
     while (y <= 1);
     BitmapTextureArgs.Texture = bitmap3;
     BitmapTextureArgs.MipMapLevel = 6;
     BitmapTextureArgs.Perform();
     resultBitmap = bitmap3;
     System.Drawing.Bitmap bitmap2 = new System.Drawing.Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
     num3 = 0;
     y = 0;
     num8 = y * 2;
     num9 = num8 + 1;
     num6 = num3 * 2;
     num7 = num6 + 1;
     pixel = resultBitmap.GetPixel(num6, num8);
     color2 = resultBitmap.GetPixel(num7, num8);
     color3 = resultBitmap.GetPixel(num6, num9);
     color4 = resultBitmap.GetPixel(num7, num9);
     num5 = (int) Math.Round((double) (((float) (((pixel.R + color2.R) + color3.R) + color4.R)) / 4f));
     num2 = (int) Math.Round((double) (((float) (((pixel.G + color2.G) + color3.G) + color4.G)) / 4f));
     num = (int) Math.Round((double) (((float) (((pixel.B + color2.B) + color3.B) + color4.B)) / 4f));
     bitmap2.SetPixel(num3, y, ColorTranslator.FromOle(modColour.OSRGB(num5, num2, num)));
     BitmapTextureArgs.Texture = bitmap2;
     BitmapTextureArgs.MipMapLevel = 7;
     BitmapTextureArgs.Perform();
     return result3;
 }
Ejemplo n.º 15
0
 public void SetFeatureName(modLists.SimpleList<string[]> Names, clsFeatureType FeatureType, clsResult Result)
 {
     modLists.SimpleList<string[]> rowsWithValue = this.GetRowsWithValue(Names, FeatureType.Code);
     if (rowsWithValue.Count == 0)
     {
         Result.WarningAdd("No name for feature type " + FeatureType.Code + ".");
     }
     else
     {
         FeatureType.Name = rowsWithValue[0][1];
     }
 }
Ejemplo n.º 16
0
 public clsResult GenerateOil()
 {
     int num;
     int num2;
     int num6;
     clsPassageNode[,] passageNodes;
     int num17;
     int num18;
     clsResult result2 = new clsResult("Oil");
     int num7 = this.PassageNodeCount - 1;
     for (num = 0; num <= num7; num++)
     {
         int num8 = this.SymmetryBlockCount - 1;
         num2 = 0;
         while (num2 <= num8)
         {
             this.PassageNodes[num2, num].OilCount = 0;
             num2++;
         }
     }
     clsPassageNodeNework nework = this.MakePassageNodeNetwork();
     PathfinderNode[] startNodes = new PathfinderNode[1];
     this.PassageNodeDists = new float[(this.SymmetryBlockCount - 1) + 1, (this.PassageNodeCount - 1) + 1, (this.SymmetryBlockCount - 1) + 1, (this.PassageNodeCount - 1) + 1];
     int num9 = this.PassageNodeCount - 1;
     for (num = 0; num <= num9; num++)
     {
         int num10 = this.SymmetryBlockCount - 1;
         for (int i = 0; i <= num10; i++)
         {
             this.PassageNodeDists[i, num, i, num] = 0f;
             int num11 = this.PassageNodeCount - 1;
             num2 = 0;
             while (num2 <= num11)
             {
                 int num12 = this.SymmetryBlockCount - 1;
                 for (int j = 0; j <= num12; j++)
                 {
                     if ((this.PassageNodes[0, num].IsWater | this.PassageNodes[j, num2].IsWater) | ((j != 0) & (i != 0)))
                     {
                         this.PassageNodeDists[i, num, j, num2] = float.MaxValue;
                         this.PassageNodeDists[j, num2, i, num] = float.MaxValue;
                     }
                     else
                     {
                         startNodes[0] = nework.PassageNodePathNodes[i, num];
                         PathfinderNetwork.PathList[] listArray = nework.Network.GetPath(startNodes, nework.PassageNodePathNodes[j, num2], -1, 0);
                         if (listArray == null)
                         {
                             result2.ProblemAdd("Map is not all connected.");
                             nework.Network.Deallocate();
                             return result2;
                         }
                         if (listArray[0].PathCount != 1)
                         {
                             Debugger.Break();
                         }
                         this.PassageNodeDists[i, num, j, num2] = listArray[0].Paths[0].Value;
                         this.PassageNodeDists[j, num2, i, num] = listArray[0].Paths[0].Value;
                     }
                 }
                 num2++;
             }
         }
     }
     nework.Network.Deallocate();
     int num5 = 1;
     int num13 = this.OilAtATime - 1;
     num = 0;
     while (num <= num13)
     {
         num5 *= this.PassageNodeCount;
         num++;
     }
     clsOilBalanceLoopArgs args = new clsOilBalanceLoopArgs {
         OilClusterSizes = new int[(this.OilAtATime - 1) + 1],
         PlayerOilScore = new double[(this.TopLeftPlayerCount - 1) + 1],
         OilNodes = new clsPassageNode[(this.OilAtATime - 1) + 1]
     };
     while (num6 < this.ExtraOilCount)
     {
         int num14 = this.OilAtATime - 1;
         num = 0;
         while (num <= num14)
         {
             args.OilClusterSizes[num] = Math.Min(this.ExtraOilClusterSizeMin + ((int) Math.Round((double) ((float) (App.Random.Next() * ((this.ExtraOilClusterSizeMax - this.ExtraOilClusterSizeMin) + 1))))), Math.Max((int) Math.Round(Math.Ceiling((double) (((double) (this.ExtraOilCount - num6)) / ((double) this.SymmetryBlockCount)))), 1));
             num++;
         }
         args.OilPossibilities = new clsOilPossibilities();
         this.OilBalanceLoop(args, 0);
         clsOilPossibilities.clsPossibility bestPossibility = args.OilPossibilities.BestPossibility;
         if (bestPossibility != null)
         {
             int num15 = this.OilAtATime - 1;
             num2 = 0;
             while (num2 <= num15)
             {
                 int num16 = this.SymmetryBlockCount - 1;
                 num = 0;
                 while (num <= num16)
                 {
                     passageNodes = this.PassageNodes;
                     num17 = num;
                     num18 = bestPossibility.Nodes[num2].Num;
                     passageNodes[num17, num18].OilCount += args.OilClusterSizes[num2];
                     num++;
                 }
                 num6 += args.OilClusterSizes[num2] * this.SymmetryBlockCount;
                 num2++;
             }
             int num19 = this.TopLeftPlayerCount - 1;
             num = 0;
             while (num <= num19)
             {
                 double[] playerOilScore = args.PlayerOilScore;
                 num18 = num;
                 playerOilScore[num18] += bestPossibility.PlayerOilScoreAddition[num];
                 num++;
             }
         }
         else
         {
             result2.WarningAdd("Could not place all of the oil. " + Conversions.ToString(num6) + " oil was placed.");
             break;
         }
     }
     int num20 = this.TopLeftPlayerCount - 1;
     for (num = 0; num <= num20; num++)
     {
         int num21 = this.SymmetryBlockCount - 1;
         for (num2 = 0; num2 <= num21; num2++)
         {
             passageNodes = this.PassageNodes;
             num18 = num2;
             num17 = this.PlayerBases[num].Nodes[0].Num;
             passageNodes[num18, num17].OilCount += this.BaseOilCount;
         }
     }
     return result2;
 }
Ejemplo n.º 17
0
 public void SetTemplateName(modLists.SimpleList<string[]> Names, clsDroidTemplate Template, clsResult Result)
 {
     modLists.SimpleList<string[]> rowsWithValue = this.GetRowsWithValue(Names, Template.Code);
     if (rowsWithValue.Count == 0)
     {
         Result.WarningAdd("No name for droid template " + Template.Code + ".");
     }
     else
     {
         Template.Name = rowsWithValue[0][1];
     }
 }
Ejemplo n.º 18
0
        public clsResult ReadPIE(StreamReader File, clsObjectData Owner)
        {
            int num;
            int num2;
            int num3;
            bool flag;
            int num6;
            int num8;
            int num9;
            int num10;
            clsResult result;
            string[] strArray;
            string str;
            string str2;
            string[] strArray2;
            int num12;
            clsResult result2 = new clsResult("Reading PIE");
            string stringCheck = "";
            sPIELevel[] levelArray = new sPIELevel[0];
            int index = -1;
            Label_001E:
            str = File.ReadLine();
            if (str == null)
            {
                goto Label_0BD9;
            }
            Label_002F:
            if (Strings.Left(str, 3) == "PIE")
            {
                num10 = Conversions.ToInteger(Strings.Right(str, str.Length - 4));
                if ((num10 != 2) & (num10 != 3))
                {
                    result2.ProblemAdd("Version is unknown.");
                    return result2;
                }
                goto Label_001E;
            }
            if (Strings.Left(str, 4) == "TYPE")
            {
                goto Label_001E;
            }
            if (Strings.Left(str, 7) == "TEXTURE")
            {
                stringCheck = Strings.Right(str, str.Length - 10);
                num = Strings.InStrRev(stringCheck, " ", -1, CompareMethod.Binary);
                if (num > 0)
                {
                    num = Strings.InStrRev(stringCheck, " ", num - 1, CompareMethod.Binary);
                }
                else
                {
                    result2.ProblemAdd("Bad texture name.");
                    return result2;
                }
                if (num <= 0)
                {
                    result2.ProblemAdd("Bad texture name.");
                    return result2;
                }
                stringCheck = Strings.Left(stringCheck, num - 1);
                goto Label_001E;
            }
            if (Strings.Left(str, 6) == "LEVELS")
            {
                num6 = Conversions.ToInteger(Strings.Right(str, str.Length - 7));
                levelArray = new sPIELevel[(num6 - 1) + 1];
                goto Label_001E;
            }
            if (Strings.Left(str, 6) == "LEVEL ")
            {
                index = Conversions.ToInteger(Strings.Right(str, str.Length - 6)) - 1;
                if (index >= num6)
                {
                    result2.ProblemAdd("Level number >= number of levels.");
                    return result2;
                }
                goto Label_001E;
            }
            if (Strings.Left(str, 6) != "POINTS")
            {
                if (Strings.Left(str, 8) != "POLYGONS")
                {
                    if (Strings.Left(str, 10) != "CONNECTORS")
                    {
                        goto Label_001E;
                    }
                    this.ConnectorCount = Conversions.ToInteger(Strings.Right(str, str.Length - 11));
                    this.Connectors = new modMath.sXYZ_sng[(this.ConnectorCount - 1) + 1];
                    num = 0;
                    goto Label_0A69;
                }
                levelArray[index].PolygonCount = Conversions.ToInteger(Strings.Right(str, str.Length - 9));
                levelArray[index].Polygon = new sPIELevel.sPolygon[(levelArray[index].PolygonCount - 1) + 1];
                num = 0;
            }
            else
            {
                levelArray[index].PointCount = Conversions.ToInteger(Strings.Right(str, str.Length - 7));
                levelArray[index].Point = new modMath.sXYZ_sng[(levelArray[index].PointCount - 1) + 1];
                num = 0;
                while (true)
                {
                    str = File.ReadLine();
                    if (str == null)
                    {
                        goto Label_0BD9;
                    }
                    str2 = Strings.Left(str, 1);
                    if (!((str2 == "\t") | (str2 == " ")))
                    {
                        if (str2 != "")
                        {
                            goto Label_002F;
                        }
                    }
                    else
                    {
                        strArray = new string[3];
                        num3 = 0;
                        strArray[0] = "";
                        flag = false;
                        int num11 = str.Length - 1;
                        for (num2 = 0; num2 <= num11; num2++)
                        {
                            if ((str[num2] != ' ') & (str[num2] != '\t'))
                            {
                                flag = true;
                                strArray2 = strArray;
                                num12 = num3;
                                strArray2[num12] = strArray2[num12] + Conversions.ToString(str[num2]);
                            }
                            else if (flag)
                            {
                                num3++;
                                if (num3 == 3)
                                {
                                    break;
                                }
                                strArray[num3] = "";
                                flag = false;
                            }
                        }
                        try
                        {
                            levelArray[index].Point[num].X = Conversions.ToSingle(strArray[0]);
                            levelArray[index].Point[num].Y = Conversions.ToSingle(strArray[1]);
                            levelArray[index].Point[num].Z = Conversions.ToSingle(strArray[2]);
                        }
                        catch (Exception exception1)
                        {
                            ProjectData.SetProjectError(exception1);
                            Exception exception = exception1;
                            result2.ProblemAdd("Bad point " + Conversions.ToString(num));
                            result = result2;
                            ProjectData.ClearProjectError();
                            return result;
                        }
                        num++;
                    }
                }
            }
            while (true)
            {
                str = File.ReadLine();
                if (str == null)
                {
                    goto Label_0BD9;
                }
                str2 = Strings.Left(str, 1);
                if (!((str2 == "\t") | (str2 == " ")))
                {
                    if (str2 != "")
                    {
                        goto Label_002F;
                    }
                }
                else
                {
                    num3 = 0;
                    strArray = new string[num3 + 1];
                    strArray[num3] = "";
                    int num13 = str.Length - 1;
                    for (num2 = 0; num2 <= num13; num2++)
                    {
                        if ((str[num2] == ' ') | (str[num2] == '\t'))
                        {
                            if (strArray[num3].Length > 0)
                            {
                                num3++;
                                strArray = (string[]) Utils.CopyArray((Array) strArray, new string[num3 + 1]);
                                strArray[num3] = "";
                            }
                        }
                        else
                        {
                            strArray2 = strArray;
                            num12 = num3;
                            strArray2[num12] = strArray2[num12] + Conversions.ToString(str[num2]);
                        }
                    }
                    if (strArray[num3].Length == 0)
                    {
                        strArray = (string[]) Utils.CopyArray((Array) strArray, new string[(num3 - 1) + 1]);
                    }
                    else
                    {
                        num3++;
                    }
                    if (num10 == 3)
                    {
                        int num4;
                        if (num3 < 2)
                        {
                            result2.ProblemAdd("Too few fields for polygon " + Conversions.ToString(num));
                            return result2;
                        }
                        try
                        {
                            num4 = Conversions.ToInteger(strArray[1]);
                        }
                        catch (Exception exception7)
                        {
                            ProjectData.SetProjectError(exception7);
                            Exception exception2 = exception7;
                            result2.ProblemAdd("Bad polygon point count: " + exception2.Message);
                            result = result2;
                            ProjectData.ClearProjectError();
                            return result;
                        }
                        levelArray[index].Polygon[num].PointCount = num4;
                        levelArray[index].Polygon[num].PointNum = new int[(num4 - 1) + 1];
                        levelArray[index].Polygon[num].TexCoord = new modMath.sXY_sng[(num4 - 1) + 1];
                        switch (num4)
                        {
                            case 3:
                                num9++;
                                break;

                            case 4:
                                num8++;
                                break;
                        }
                        int num14 = strArray.GetUpperBound(0) + 1;
                        if (num14 == 0)
                        {
                            goto Label_002F;
                        }
                        if (num14 != (2 + (num4 * 3)))
                        {
                            result2.ProblemAdd("Wrong number of fields (" + Conversions.ToString((int) (strArray.GetUpperBound(0) + 1)) + ") for polygon " + Conversions.ToString(num));
                            return result2;
                        }
                        int num15 = num4 - 1;
                        for (num2 = 0; num2 <= num15; num2++)
                        {
                            try
                            {
                                levelArray[index].Polygon[num].PointNum[num2] = Conversions.ToInteger(strArray[2 + num2]);
                            }
                            catch (Exception exception8)
                            {
                                ProjectData.SetProjectError(exception8);
                                Exception exception3 = exception8;
                                result2.ProblemAdd("Bad polygon point: " + exception3.Message);
                                result = result2;
                                ProjectData.ClearProjectError();
                                return result;
                            }
                            try
                            {
                                levelArray[index].Polygon[num].TexCoord[num2].X = Conversions.ToSingle(strArray[(2 + num4) + (2 * num2)]);
                            }
                            catch (Exception exception9)
                            {
                                ProjectData.SetProjectError(exception9);
                                Exception exception4 = exception9;
                                result2.ProblemAdd("Bad polygon x tex coord: " + exception4.Message);
                                result = result2;
                                ProjectData.ClearProjectError();
                                return result;
                            }
                            try
                            {
                                levelArray[index].Polygon[num].TexCoord[num2].Y = Conversions.ToSingle(strArray[((2 + num4) + (2 * num2)) + 1]);
                            }
                            catch (Exception exception10)
                            {
                                ProjectData.SetProjectError(exception10);
                                Exception exception5 = exception10;
                                result2.ProblemAdd("Bad polygon y tex coord: " + exception5.Message);
                                result = result2;
                                ProjectData.ClearProjectError();
                                return result;
                            }
                        }
                        num++;
                    }
                    else if (num10 == 2)
                    {
                        int num5 = 0;
                        do
                        {
                            levelArray[index].Polygon[num].PointCount = Conversions.ToInteger(strArray[num5 + 1]);
                            levelArray[index].Polygon[num].PointNum = new int[(levelArray[index].Polygon[num].PointCount - 1) + 1];
                            levelArray[index].Polygon[num].TexCoord = new modMath.sXY_sng[(levelArray[index].Polygon[num].PointCount - 1) + 1];
                            if (levelArray[index].Polygon[num].PointCount == 3)
                            {
                                num9++;
                            }
                            else if (levelArray[index].Polygon[num].PointCount == 4)
                            {
                                num8++;
                            }
                            int num16 = levelArray[index].Polygon[num].PointCount - 1;
                            for (num2 = 0; num2 <= num16; num2++)
                            {
                                levelArray[index].Polygon[num].PointNum[num2] = Conversions.ToInteger(strArray[(num5 + 2) + num2]);
                            }
                            num3 = (num5 + 2) + levelArray[index].Polygon[num].PointCount;
                            if ((((((((strArray[num5] == "4200") | (strArray[num5] == "4000")) | (strArray[num5] == "6a00")) | (strArray[num5] == "4a00")) | (strArray[num5] == "6200")) | (strArray[num5] == "14200")) | (strArray[num5] == "14a00")) | (strArray[num5] == "16a00"))
                            {
                                num3 += 4;
                            }
                            int num17 = levelArray[index].Polygon[num].PointCount - 1;
                            for (num2 = 0; num2 <= num17; num2++)
                            {
                                levelArray[index].Polygon[num].TexCoord[num2].X = Conversions.ToSingle(strArray[num3]);
                                levelArray[index].Polygon[num].TexCoord[num2].Y = Conversions.ToSingle(strArray[num3 + 1]);
                                num3 += 2;
                            }
                            num5 = num3;
                            num++;
                        }
                        while (num5 < strArray.GetUpperBound(0));
                    }
                }
            }
            Label_0A69:
            str = File.ReadLine();
            if (str != null)
            {
                str2 = Strings.Left(str, 1);
                if (!((str2 == "\t") | (str2 == " ")))
                {
                    if (str2 != "")
                    {
                        goto Label_002F;
                    }
                }
                else
                {
                    strArray = new string[3];
                    num3 = 0;
                    strArray[0] = "";
                    flag = false;
                    int num18 = str.Length - 1;
                    for (num2 = 0; num2 <= num18; num2++)
                    {
                        if ((str[num2] != ' ') & (str[num2] != '\t'))
                        {
                            flag = true;
                            strArray2 = strArray;
                            num12 = num3;
                            strArray2[num12] = strArray2[num12] + Conversions.ToString(str[num2]);
                        }
                        else if (flag)
                        {
                            num3++;
                            if (num3 == 3)
                            {
                                break;
                            }
                            strArray[num3] = "";
                            flag = false;
                        }
                    }
                    try
                    {
                        this.Connectors[num].X = Conversions.ToSingle(strArray[0]);
                        this.Connectors[num].Y = Conversions.ToSingle(strArray[2]);
                        this.Connectors[num].Z = Conversions.ToSingle(strArray[1]);
                    }
                    catch (Exception exception11)
                    {
                        ProjectData.SetProjectError(exception11);
                        Exception exception6 = exception11;
                        result2.ProblemAdd("Bad connector " + Conversions.ToString(num));
                        result = result2;
                        ProjectData.ClearProjectError();
                        return result;
                    }
                    num++;
                }
                goto Label_0A69;
            }
            Label_0BD9:
            this.GLTextureNum = Owner.Get_TexturePage_GLTexture(Strings.Left(stringCheck, stringCheck.Length - 4));
            if (this.GLTextureNum == 0)
            {
                result2.WarningAdd("Texture \"" + stringCheck + "\" was not loaded");
            }
            this.TriangleCount = num9;
            this.QuadCount = num8;
            this.Triangles = new sTriangle[(this.TriangleCount - 1) + 1];
            this.Quads = new sQuad[(this.QuadCount - 1) + 1];
            num9 = 0;
            num8 = 0;
            int num19 = num6 - 1;
            for (index = 0; index <= num19; index++)
            {
                int num20 = levelArray[index].PolygonCount - 1;
                for (num = 0; num <= num20; num++)
                {
                    if (levelArray[index].Polygon[num].PointCount == 3)
                    {
                        this.Triangles[num9].PosA = levelArray[index].Point[levelArray[index].Polygon[num].PointNum[0]];
                        this.Triangles[num9].PosB = levelArray[index].Point[levelArray[index].Polygon[num].PointNum[1]];
                        this.Triangles[num9].PosC = levelArray[index].Point[levelArray[index].Polygon[num].PointNum[2]];
                        switch (num10)
                        {
                            case 2:
                                this.Triangles[num9].TexCoordA.X = (float) (((double) levelArray[index].Polygon[num].TexCoord[0].X) / 255.0);
                                this.Triangles[num9].TexCoordA.Y = (float) (((double) levelArray[index].Polygon[num].TexCoord[0].Y) / 255.0);
                                this.Triangles[num9].TexCoordB.X = (float) (((double) levelArray[index].Polygon[num].TexCoord[1].X) / 255.0);
                                this.Triangles[num9].TexCoordB.Y = (float) (((double) levelArray[index].Polygon[num].TexCoord[1].Y) / 255.0);
                                this.Triangles[num9].TexCoordC.X = (float) (((double) levelArray[index].Polygon[num].TexCoord[2].X) / 255.0);
                                this.Triangles[num9].TexCoordC.Y = (float) (((double) levelArray[index].Polygon[num].TexCoord[2].Y) / 255.0);
                                break;

                            case 3:
                                this.Triangles[num9].TexCoordA = levelArray[index].Polygon[num].TexCoord[0];
                                this.Triangles[num9].TexCoordB = levelArray[index].Polygon[num].TexCoord[1];
                                this.Triangles[num9].TexCoordC = levelArray[index].Polygon[num].TexCoord[2];
                                break;
                        }
                        num9++;
                        continue;
                    }
                    if (levelArray[index].Polygon[num].PointCount == 4)
                    {
                        this.Quads[num8].PosA = levelArray[index].Point[levelArray[index].Polygon[num].PointNum[0]];
                        this.Quads[num8].PosB = levelArray[index].Point[levelArray[index].Polygon[num].PointNum[1]];
                        this.Quads[num8].PosC = levelArray[index].Point[levelArray[index].Polygon[num].PointNum[2]];
                        this.Quads[num8].PosD = levelArray[index].Point[levelArray[index].Polygon[num].PointNum[3]];
                        switch (num10)
                        {
                            case 2:
                                this.Quads[num8].TexCoordA.X = (float) (((double) levelArray[index].Polygon[num].TexCoord[0].X) / 255.0);
                                this.Quads[num8].TexCoordA.Y = (float) (((double) levelArray[index].Polygon[num].TexCoord[0].Y) / 255.0);
                                this.Quads[num8].TexCoordB.X = (float) (((double) levelArray[index].Polygon[num].TexCoord[1].X) / 255.0);
                                this.Quads[num8].TexCoordB.Y = (float) (((double) levelArray[index].Polygon[num].TexCoord[1].Y) / 255.0);
                                this.Quads[num8].TexCoordC.X = (float) (((double) levelArray[index].Polygon[num].TexCoord[2].X) / 255.0);
                                this.Quads[num8].TexCoordC.Y = (float) (((double) levelArray[index].Polygon[num].TexCoord[2].Y) / 255.0);
                                this.Quads[num8].TexCoordD.X = (float) (((double) levelArray[index].Polygon[num].TexCoord[3].X) / 255.0);
                                this.Quads[num8].TexCoordD.Y = (float) (((double) levelArray[index].Polygon[num].TexCoord[3].Y) / 255.0);
                                break;

                            case 3:
                                this.Quads[num8].TexCoordA = levelArray[index].Polygon[num].TexCoord[0];
                                this.Quads[num8].TexCoordB = levelArray[index].Polygon[num].TexCoord[1];
                                this.Quads[num8].TexCoordC = levelArray[index].Polygon[num].TexCoord[2];
                                this.Quads[num8].TexCoordD = levelArray[index].Polygon[num].TexCoord[3];
                                break;
                        }
                        num8++;
                    }
                }
            }
            return result2;
        }
Ejemplo n.º 19
0
 public void SetWallName(modLists.SimpleList<string[]> Names, clsWallType WallType, clsResult Result)
 {
     modLists.SimpleList<string[]> rowsWithValue = this.GetRowsWithValue(Names, WallType.Code);
     if (rowsWithValue.Count == 0)
     {
         Result.WarningAdd("No name for structure type " + WallType.Code + ".");
     }
     else
     {
         WallType.Name = rowsWithValue[0][1];
     }
 }
Ejemplo n.º 20
0
 private clsResult ValidateMap_Multiplayer(int PlayerCount, bool IsXPlayerFormat)
 {
     IEnumerator enumerator;
     clsResult result = new clsResult("Validate for multiplayer");
     if ((PlayerCount < 2) | (PlayerCount > 10))
     {
         result.ProblemAdd("Unable to evaluate for multiplayer due to bad number of players.");
         return result;
     }
     int[] numArray2 = new int[10];
     int[] numArray = new int[10];
     int[] numArray3 = new int[10];
     int num = 0;
     int num3 = 0;
     int num2 = Math.Max(PlayerCount, 7);
     try
     {
         enumerator = this.Map.Units.GetEnumerator();
         while (enumerator.MoveNext())
         {
             clsMap.clsUnit current = (clsMap.clsUnit) enumerator.Current;
             if (current.UnitGroup != this.Map.ScavengerUnitGroup)
             {
                 int[] numArray4;
                 int num5;
                 if (current.Type.Type == clsUnitType.enumType.PlayerDroid)
                 {
                     clsDroidDesign design = (clsDroidDesign) current.Type;
                     if (((((design.Body != null) & (design.Propulsion != null)) & (design.Turret1 != null)) & (design.TurretCount == 1)) && (design.Turret1.TurretType == clsTurret.enumTurretType.Construct))
                     {
                         numArray4 = numArray3;
                         num5 = current.UnitGroup.WZ_StartPos;
                         numArray4[num5]++;
                         if (design.IsTemplate)
                         {
                             numArray4 = numArray;
                             num5 = current.UnitGroup.WZ_StartPos;
                             numArray4[num5]++;
                         }
                     }
                 }
                 else if (current.Type.Type == clsUnitType.enumType.PlayerStructure)
                 {
                     clsStructureType type = (clsStructureType) current.Type;
                     if (type.Code == "A0CommandCentre")
                     {
                         numArray4 = numArray2;
                         num5 = current.UnitGroup.WZ_StartPos;
                         numArray4[num5]++;
                     }
                 }
             }
             if (current.Type.Type != clsUnitType.enumType.Feature)
             {
                 if ((current.UnitGroup.WZ_StartPos == num2) | (current.UnitGroup == this.Map.ScavengerUnitGroup))
                 {
                     num++;
                 }
                 else if ((current.UnitGroup.WZ_StartPos >= PlayerCount) && (num3 < 0x20))
                 {
                     num3++;
                     clsResultProblemGoto<clsResultItemPosGoto> item = modResults.CreateResultProblemGotoForObject(current);
                     item.Text = "An unused player (" + Conversions.ToString(current.UnitGroup.WZ_StartPos) + ") has a unit at " + current.GetPosText() + ".";
                     result.ItemAdd(item);
                 }
             }
         }
     }
     finally
     {
         if (enumerator is IDisposable)
         {
             (enumerator as IDisposable).Dispose();
         }
     }
     if (!((num2 <= 7) | IsXPlayerFormat) && (num > 0))
     {
         result.ProblemAdd("Scavengers are not supported on a map with this number of players without enabling X player support.");
     }
     int num6 = PlayerCount - 1;
     for (int i = 0; i <= num6; i++)
     {
         if (numArray2[i] == 0)
         {
             result.ProblemAdd("There is no Command Centre for player " + Conversions.ToString(i) + ".");
         }
         if (numArray3[i] == 0)
         {
             result.ProblemAdd("There are no constructor units for player " + Conversions.ToString(i) + ".");
         }
         else if (numArray[i] == 0)
         {
             result.WarningAdd("All constructor units for player " + Conversions.ToString(i) + " will only exist in master.");
         }
     }
     return result;
 }
Ejemplo n.º 21
0
 public clsModel GetModelForPIE(modLists.SimpleList<clsPIE> PIE_List, string PIE_LCaseFileTitle, clsResult ResultOutput)
 {
     if (PIE_LCaseFileTitle != "0")
     {
         clsResult resultToAdd = new clsResult("Loading PIE file " + PIE_LCaseFileTitle);
         int num2 = PIE_List.Count - 1;
         for (int i = 0; i <= num2; i++)
         {
             clsPIE spie = PIE_List[i];
             if (spie.LCaseFileTitle == PIE_LCaseFileTitle)
             {
                 if (spie.Model == null)
                 {
                     spie.Model = new clsModel();
                     try
                     {
                         StreamReader file = new StreamReader(spie.Path);
                         try
                         {
                             resultToAdd.Take(spie.Model.ReadPIE(file, this));
                         }
                         catch (Exception exception1)
                         {
                             ProjectData.SetProjectError(exception1);
                             Exception exception = exception1;
                             file.Close();
                             resultToAdd.WarningAdd(exception.Message);
                             ResultOutput.Add(resultToAdd);
                             clsModel model = spie.Model;
                             ProjectData.ClearProjectError();
                             return model;
                         }
                     }
                     catch (Exception exception3)
                     {
                         ProjectData.SetProjectError(exception3);
                         Exception exception2 = exception3;
                         resultToAdd.WarningAdd(exception2.Message);
                         ProjectData.ClearProjectError();
                     }
                 }
                 ResultOutput.Add(resultToAdd);
                 return spie.Model;
             }
         }
         if (!resultToAdd.HasWarnings)
         {
             resultToAdd.WarningAdd("file is missing");
         }
         ResultOutput.Add(resultToAdd);
     }
     return null;
 }
Ejemplo n.º 22
0
 private void btnCompile_Click(object sender, EventArgs e)
 {
     int num2;
     clsResult result = new clsResult("Compile multiplayer");
     this.SaveToMap();
     string text = this.cboLicense.Text;
     if (!modIO.InvariantParse_int(this.txtMultiPlayers.Text, ref num2))
     {
         num2 = 0;
     }
     bool isXPlayerFormat = this.cbxLevFormat.Checked;
     if ((num2 < 2) | (num2 > 10))
     {
         result.ProblemAdd("The number of players must be from 2 to " + Conversions.ToString(10));
     }
     if (!isXPlayerFormat && (((num2 != 2) & (num2 != 4)) & (num2 != 8)))
     {
         result.ProblemAdd("You must enable support for this number of players.");
     }
     int num = this.ValidateMap_WaterTris();
     if (num > 0)
     {
         result.WarningAdd(Conversions.ToString(num) + " water tiles have an incorrect triangle direction. There might be in-game graphical glitches on those tiles.");
     }
     result.Add(this.ValidateMap());
     result.Add(this.ValidateMap_UnitPositions());
     result.Add(this.ValidateMap_Multiplayer(num2, isXPlayerFormat));
     string str2 = this.txtName.Text;
     int num3 = str2.Length - 1;
     num = 0;
     while (num <= num3)
     {
         char ch = str2[num];
         if (!((((ch >= 'a') & (ch <= 'z')) | ((ch >= 'A') & (ch <= 'Z'))) | ((num >= 1) & ((((ch >= '0') & (ch <= '9')) | (ch == '-')) | (ch == '_')))))
         {
             break;
         }
         num++;
     }
     if (num < str2.Length)
     {
         result.ProblemAdd("The map's name must contain only letters, numbers, underscores and hyphens, and must begin with a letter.");
     }
     if ((str2.Length < 1) | (str2.Length > 0x10))
     {
         result.ProblemAdd("Map name must be from 1 to 16 characters.");
     }
     if (text == "")
     {
         result.ProblemAdd("Enter a valid license.");
     }
     if (result.HasProblems)
     {
         modProgram.ShowWarnings(result);
     }
     else
     {
         SaveFileDialog dialog = new SaveFileDialog();
         if (this.Map.PathInfo != null)
         {
             dialog.InitialDirectory = this.Map.PathInfo.Path;
         }
         dialog.FileName = Conversions.ToString(num2) + "c-" + str2;
         dialog.Filter = "WZ Files (*.wz)|*.wz";
         if (dialog.ShowDialog(this) == DialogResult.OK)
         {
             clsMap.sWrite_WZ_Args args = new clsMap.sWrite_WZ_Args {
                 MapName = str2,
                 Path = dialog.FileName,
                 Overwrite = true
             };
             this.SetScrollLimits(ref args.ScrollMin, ref args.ScrollMax);
             args.Multiplayer = new clsMap.sWrite_WZ_Args.clsMultiplayer();
             args.Multiplayer.AuthorName = this.txtAuthor.Text;
             args.Multiplayer.PlayerCount = num2;
             args.Multiplayer.IsBetaPlayerFormat = isXPlayerFormat;
             args.Multiplayer.License = text;
             args.CompileType = clsMap.sWrite_WZ_Args.enumCompileType.Multiplayer;
             result.Add(this.Map.Write_WZ(args));
             modProgram.ShowWarnings(result);
             if (!result.HasWarnings)
             {
                 this.Close();
             }
         }
     }
 }
Ejemplo n.º 23
0
 public static clsResult LoadTilesets(string TilesetsPath)
 {
     string[] directories;
     clsResult result3 = new clsResult("Loading tilesets");
     try
     {
         directories = Directory.GetDirectories(TilesetsPath);
     }
     catch (Exception exception1)
     {
         ProjectData.SetProjectError(exception1);
         Exception exception = exception1;
         result3.ProblemAdd(exception.Message);
         clsResult result = result3;
         ProjectData.ClearProjectError();
         return result;
     }
     if (directories != null)
     {
         clsTileset current;
         IEnumerator enumerator;
         foreach (string str in directories)
         {
             current = new clsTileset();
             clsResult resultToAdd = current.LoadDirectory(str);
             result3.Add(resultToAdd);
             if (!resultToAdd.HasProblems)
             {
                 Tilesets.Add(current);
             }
         }
         try
         {
             enumerator = Tilesets.GetEnumerator();
             while (enumerator.MoveNext())
             {
                 current = (clsTileset) enumerator.Current;
                 if (current.Name == "tertilesc1hw")
                 {
                     current.Name = "Arizona";
                     Tileset_Arizona = current;
                     current.IsOriginal = true;
                     current.BGColour = new sRGB_sng(0.8f, 0.5843138f, 0.2745098f);
                 }
                 else
                 {
                     if (current.Name == "tertilesc2hw")
                     {
                         current.Name = "Urban";
                         Tileset_Urban = current;
                         current.IsOriginal = true;
                         current.BGColour = new sRGB_sng(0.4627451f, 0.6470588f, 0.7960784f);
                         continue;
                     }
                     if (current.Name == "tertilesc3hw")
                     {
                         current.Name = "Rocky Mountains";
                         Tileset_Rockies = current;
                         current.IsOriginal = true;
                         current.BGColour = new sRGB_sng(0.7137255f, 0.8823529f, 0.9254902f);
                     }
                 }
             }
         }
         finally
         {
             if (enumerator is IDisposable)
             {
                 (enumerator as IDisposable).Dispose();
             }
         }
         if (Tileset_Arizona == null)
         {
             result3.WarningAdd("Arizona tileset is missing.");
         }
         if (Tileset_Urban == null)
         {
             result3.WarningAdd("Urban tileset is missing.");
         }
         if (Tileset_Rockies == null)
         {
             result3.WarningAdd("Rocky Mountains tileset is missing.");
         }
     }
     return result3;
 }