Exemple #1
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();
             }
         }
     }
 }
Exemple #2
0
 public clsResult GenerateLayout()
 {
     int num;
     int num2;
     int level;
     int num5;
     bool flag;
     int num6;
     int baseLevel;
     int num9;
     modMath.sXY_int _int;
     Position.XY_dbl _dbl;
     bool flag2;
     int num12;
     int num13;
     int num14;
     clsNearest nearest;
     modProgram.sResult result3;
     modMath.sXY_int _int4;
     clsPassageNode node;
     clsPassageNode other;
     clsPassageNode node3;
     modMath.sXY_int _int5;
     int num41;
     int[] mapLevelCount;
     clsResult result4 = new clsResult("Layout");
     this.TotalPlayerCount = this.TopLeftPlayerCount * this.SymmetryBlockCount;
     _int4.X = (int) Math.Round((double) (((double) (this.TileSize.X * 0x80)) / ((double) this.SymmetryBlockCountXY.X)));
     _int4.Y = (int) Math.Round((double) (((double) (this.TileSize.Y * 0x80)) / ((double) this.SymmetryBlockCountXY.Y)));
     int num19 = (int) Math.Round((double) (128f * this.NodeScale));
     int num16 = (int) Math.Round(Math.Ceiling((double) (((((2.0 * this.TileSize.X) * 128.0) * this.TileSize.Y) * 128.0) / ((3.1415926535897931 * num19) * num19))));
     this.PassageNodes = new clsPassageNode[(this.SymmetryBlockCount - 1) + 1, (num16 - 1) + 1];
     int x = 0;
     if (this.SymmetryBlockCountXY.X == 1)
     {
         _int.X = (int) Math.Round(((double) (((this.TileSize.X * 0x80) - (x * 2.0)) / ((double) ((this.NodeScale * 128f) * 2f)))));
         _dbl.X = ((this.TileSize.X * 0x80) - (x * 2.0)) / ((double) _int.X);
         _int.X--;
     }
     else
     {
         _int.X = (int) Math.Round(((double) ((((((double) (this.TileSize.X * 0x80)) / ((double) this.SymmetryBlockCountXY.X)) - x) / ((double) ((this.NodeScale * 128f) * 2f))) - 0.5)));
         _dbl.X = ((((double) (this.TileSize.X * 0x80)) / ((double) this.SymmetryBlockCountXY.X)) - x) / (((double) ((((((double) (this.TileSize.X * 0x80)) / ((double) this.SymmetryBlockCountXY.X)) - x) / ((double) ((this.NodeScale * 128f) * 2f))) - 0.5)) + 0.5);
     }
     if (this.SymmetryBlockCountXY.Y == 1)
     {
         _int.Y = (int) Math.Round(((double) (((this.TileSize.Y * 0x80) - (x * 2.0)) / ((double) ((this.NodeScale * 128f) * 2f)))));
         _dbl.Y = ((this.TileSize.Y * 0x80) - (x * 2.0)) / ((double) _int.Y);
         _int.Y--;
     }
     else
     {
         _int.Y = (int) Math.Round(((double) ((((((double) (this.TileSize.Y * 0x80)) / ((double) this.SymmetryBlockCountXY.Y)) - x) / ((double) ((this.NodeScale * 128f) * 2f))) - 0.5)));
         _dbl.Y = ((((double) (this.TileSize.Y * 0x80)) / ((double) this.SymmetryBlockCountXY.Y)) - x) / (((double) ((((((double) (this.TileSize.Y * 0x80)) / ((double) this.SymmetryBlockCountXY.Y)) - x) / ((double) ((this.NodeScale * 128f) * 2f))) - 0.5)) + 0.5);
     }
     this.PassageNodeCount = 0;
     int y = _int.Y;
     for (int i = 0; i <= y; i++)
     {
         _int5 = new modMath.sXY_int(x, x + ((int) Math.Round((double) (i * _dbl.Y))));
         if (!this.MakePassageNodes(_int5, true))
         {
             result4.ProblemAdd("Error: Bad border node.");
             return result4;
         }
         if (this.SymmetryBlockCountXY.X == 1)
         {
             _int5 = new modMath.sXY_int((this.TileSize.X * 0x80) - x, x + ((int) Math.Round((double) (i * _dbl.Y))));
             if (!this.MakePassageNodes(_int5, true))
             {
                 result4.ProblemAdd("Error: Bad border node.");
                 return result4;
             }
         }
     }
     int num26 = _int.X;
     for (int j = 1; j <= num26; j++)
     {
         _int5 = new modMath.sXY_int(x + ((int) Math.Round((double) (j * _dbl.X))), x);
         if (!this.MakePassageNodes(_int5, true))
         {
             result4.ProblemAdd("Error: Bad border node.");
             return result4;
         }
         if (this.SymmetryBlockCountXY.Y == 1)
         {
             _int5 = new modMath.sXY_int(x + ((int) Math.Round((double) (j * _dbl.X))), (this.TileSize.Y * 0x80) - x);
             if (!this.MakePassageNodes(_int5, true))
             {
                 result4.ProblemAdd("Error: Bad border node.");
                 return result4;
             }
         }
     }
     Label_0538:
     num14 = 0;
     do
     {
         modMath.sXY_int _int2;
         if (this.SymmetryBlockCountXY.X == 1)
         {
             _int2.X = x + ((int) Math.Round((double) ((float) (App.Random.Next() * ((_int4.X - (x * 2)) + 1)))));
         }
         else
         {
             _int2.X = x + ((int) Math.Round((double) ((float) (App.Random.Next() * ((_int4.X - x) + 1)))));
         }
         if (this.SymmetryBlockCountXY.Y == 1)
         {
             _int2.Y = x + ((int) Math.Round((double) ((float) (App.Random.Next() * ((_int4.Y - (x * 2)) + 1)))));
         }
         else
         {
             _int2.Y = x + ((int) Math.Round((double) ((float) (App.Random.Next() * ((_int4.Y - x) + 1)))));
         }
         int num27 = this.PassageNodeCount - 1;
         num = 0;
         while (num <= num27)
         {
             int num28 = this.SymmetryBlockCount - 1;
             num2 = 0;
             while (num2 <= num28)
             {
                 _int5 = this.PassageNodes[num2, num].Pos - _int2;
                 if (_int5.ToDoubles().GetMagnitude() < (num19 * 2))
                 {
                     break;
                 }
                 num2++;
             }
             num++;
         }
         if ((num == this.PassageNodeCount) && this.MakePassageNodes(_int2, false))
         {
             goto Label_0538;
         }
         num14++;
     }
     while (num14 < ((int) Math.Round((double) (((64f * this.TileSize.X) * this.TileSize.Y) / (this.NodeScale * this.NodeScale)))));
     this.PassageNodes = (clsPassageNode[,]) Utils.CopyArray((Array) this.PassageNodes, new clsPassageNode[(this.SymmetryBlockCount - 1) + 1, (this.PassageNodeCount - 1) + 1]);
     int num15 = (num19 * 2) * 4;
     num15 *= num15;
     this.Nearests = new clsNearest[((this.PassageNodeCount * 0x40) - 1) + 1];
     clsTestNearestArgs args2 = new clsTestNearestArgs();
     int num17 = (int) Math.Round((double) ((this.NodeScale * 1.25f) * 128f));
     args2.MaxConDist2 = num15;
     args2.MinConDist = num17;
     int num29 = this.PassageNodeCount - 1;
     num = 0;
     while (num <= num29)
     {
         args2.PassageNodeA = this.PassageNodes[0, num];
         int num30 = this.PassageNodeCount - 1;
         num2 = num;
         while (num2 <= num30)
         {
             int num31 = this.SymmetryBlockCount - 1;
             num5 = 0;
             while (num5 <= num31)
             {
                 args2.PassageNodeB = this.PassageNodes[num5, num2];
                 if (args2.PassageNodeA != args2.PassageNodeB)
                 {
                     this.TestNearest(args2);
                 }
                 num5++;
             }
             num2++;
         }
         num++;
     }
     int num32 = this.NearestCount - 1;
     for (num12 = 0; num12 <= num32; num12++)
     {
         nearest = this.Nearests[num12];
         int num33 = nearest.NodeCount - 1;
         num = 0;
         while (num <= num33)
         {
             node = nearest.NodeA[num];
             other = nearest.NodeB[num];
             int num34 = this.NearestCount - 1;
             num13 = 0;
             while (num13 <= num34)
             {
                 clsNearest nearest2 = this.Nearests[num13];
                 if (nearest2 != nearest)
                 {
                     if (nearest2.Dist2 < nearest.Dist2)
                     {
                         flag2 = true;
                     }
                     else if (nearest2.Dist2 == nearest.Dist2)
                     {
                         flag2 = nearest.Num > nearest2.Num;
                     }
                     else
                     {
                         flag2 = false;
                     }
                     if (flag2)
                     {
                         int num35 = nearest2.NodeCount - 1;
                         num2 = 0;
                         while (num2 <= num35)
                         {
                             if (!((((node == nearest2.NodeA[num2]) | (node == nearest2.NodeB[num2])) | (other == nearest2.NodeA[num2])) | (other == nearest2.NodeB[num2])) && modMath.GetLinesIntersectBetween(node.Pos, other.Pos, nearest2.NodeA[num2].Pos, nearest2.NodeB[num2].Pos).Exists)
                             {
                                 break;
                             }
                             num2++;
                         }
                         if (num2 < nearest2.NodeCount)
                         {
                             clsNearest nearest3 = nearest;
                             nearest3.BlockedCount++;
                             clsNearest nearest4 = nearest2;
                             nearest4.BlockedNearests[nearest4.BlockedNearestCount] = nearest;
                             nearest3 = nearest4;
                             nearest3.BlockedNearestCount++;
                             nearest4 = null;
                         }
                     }
                 }
                 num13++;
             }
             num++;
         }
     }
     this.Connections = new clsConnection[((this.PassageNodeCount * 0x10) - 1) + 1];
     do
     {
         num6 = 0;
         num12 = 0;
         while (num12 < this.NearestCount)
         {
             nearest = this.Nearests[num12];
             flag2 = true;
             if ((nearest.BlockedCount == 0) & flag2)
             {
                 int connectionCount = this.ConnectionCount;
                 int num36 = nearest.NodeCount - 1;
                 baseLevel = 0;
                 while (baseLevel <= num36)
                 {
                     this.Connections[this.ConnectionCount] = new clsConnection(nearest.NodeA[baseLevel], nearest.NodeB[baseLevel]);
                     this.ConnectionCount++;
                     baseLevel++;
                 }
                 int num37 = nearest.NodeCount - 1;
                 baseLevel = 0;
                 while (baseLevel <= num37)
                 {
                     num = connectionCount + baseLevel;
                     this.Connections[num].ReflectionCount = nearest.NodeCount - 1;
                     this.Connections[num].Reflections = new clsConnection[(this.Connections[num].ReflectionCount - 1) + 1];
                     num2 = 0;
                     int num38 = nearest.NodeCount - 1;
                     num9 = 0;
                     while (num9 <= num38)
                     {
                         if (num9 != baseLevel)
                         {
                             this.Connections[num].Reflections[num2] = this.Connections[connectionCount + num9];
                             num2++;
                         }
                         num9++;
                     }
                     baseLevel++;
                 }
                 int num39 = nearest.BlockedNearestCount - 1;
                 num5 = 0;
                 while (num5 <= num39)
                 {
                     nearest.BlockedNearests[num5].Invalid = true;
                     num5++;
                 }
                 this.NearestCount--;
                 num13 = nearest.Num;
                 nearest.Num = -1;
                 if (num13 != this.NearestCount)
                 {
                     this.Nearests[num13] = this.Nearests[this.NearestCount];
                     this.Nearests[num13].Num = num13;
                 }
                 num6++;
             }
             else
             {
                 if (!flag2)
                 {
                     nearest.Invalid = true;
                 }
                 num12++;
             }
         }
         num12 = 0;
         while (num12 < this.NearestCount)
         {
             nearest = this.Nearests[num12];
             if (nearest.Invalid)
             {
                 nearest.Num = -1;
                 int num40 = nearest.BlockedNearestCount - 1;
                 baseLevel = 0;
                 while (baseLevel <= num40)
                 {
                     clsNearest[] blockedNearests = nearest.BlockedNearests;
                     num41 = baseLevel;
                     blockedNearests[num41].BlockedCount--;
                     baseLevel++;
                 }
                 this.NearestCount--;
                 if (num12 != this.NearestCount)
                 {
                     this.Nearests[num12] = this.Nearests[this.NearestCount];
                     this.Nearests[num12].Num = num12;
                 }
             }
             else
             {
                 num12++;
             }
         }
     }
     while (num6 > 0);
     int num42 = this.PassageNodeCount - 1;
     for (num = 0; num <= num42; num++)
     {
         int num43 = this.SymmetryBlockCount - 1;
         for (num2 = 0; num2 <= num43; num2++)
         {
             this.PassageNodes[num2, num].ReorderConnections();
             this.PassageNodes[num2, num].CalcIsNearBorder();
         }
     }
     clsPassageNode[] nodeArray2 = new clsPassageNode[(this.PassageNodeCount - 1) + 1];
     int index = 0;
     clsPassageNode[] nodeArray3 = new clsPassageNode[(this.PassageNodeCount - 1) + 1];
     int num44 = this.PassageNodeCount - 1;
     num = 0;
     while (num <= num44)
     {
         nodeArray2[index] = this.PassageNodes[0, num];
         index++;
         num++;
     }
     num2 = 0;
     while (index > 0)
     {
         num = (int) Math.Round((double) ((float) (App.Random.Next() * index)));
         nodeArray3[num2] = nodeArray2[num];
         num2++;
         index--;
         nodeArray2[num] = nodeArray2[index];
     }
     this.LevelHeight = 255f / ((float) (this.LevelCount - 1));
     clsPassageNodeHeightLevelArgs args = new clsPassageNodeHeightLevelArgs {
         PassageNodesMinLevel = { Nodes = new int[(this.PassageNodeCount - 1) + 1] },
         PassageNodesMaxLevel = { Nodes = new int[(this.PassageNodeCount - 1) + 1] },
         MapLevelCount = new int[(this.LevelCount - 1) + 1]
     };
     int num45 = this.PassageNodeCount - 1;
     num = 0;
     while (num <= num45)
     {
         args.PassageNodesMinLevel.Nodes[num] = 0;
         args.PassageNodesMaxLevel.Nodes[num] = this.LevelCount - 1;
         num++;
     }
     double[] numArray = new double[(this.BaseFlatArea - 1) + 1];
     clsPassageNode[] nodeArray = new clsPassageNode[(this.BaseFlatArea - 1) + 1];
     int[] numArray2 = new int[(this.BaseFlatArea - 1) + 1];
     this.PlayerBases = new sPlayerBase[(this.TotalPlayerCount - 1) + 1];
     int num46 = this.TopLeftPlayerCount - 1;
     num2 = 0;
     while (num2 <= num46)
     {
         int num3 = 0;
         int num47 = this.PassageNodeCount - 1;
         num = 0;
         while (num <= num47)
         {
             int num48 = this.SymmetryBlockCount - 1;
             num9 = 0;
             while (num9 <= num48)
             {
                 node = this.PassageNodes[num9, num];
                 if (!node.IsOnBorder)
                 {
                     _int5 = node.Pos - this.PlayerBasePos[num2];
                     double magnitude = _int5.ToDoubles().GetMagnitude();
                     num5 = num3 - 1;
                     while (num5 >= 0)
                     {
                         if (magnitude > numArray[num5])
                         {
                             break;
                         }
                         num5 += -1;
                     }
                     num5++;
                     int num49 = num5;
                     baseLevel = Math.Min((int) (num3 - 1), (int) (this.BaseFlatArea - 2));
                     while (baseLevel >= num49)
                     {
                         numArray[baseLevel + 1] = numArray[baseLevel];
                         nodeArray[baseLevel + 1] = nodeArray[baseLevel];
                         baseLevel += -1;
                     }
                     if (num5 < this.BaseFlatArea)
                     {
                         numArray[num5] = magnitude;
                         nodeArray[num5] = node;
                         num3 = Math.Max(num3, num5 + 1);
                     }
                 }
                 num9++;
             }
             num++;
         }
         if (this.BaseLevel < 0)
         {
             baseLevel = (int) Math.Round((double) ((float) (App.Random.Next() * this.LevelCount)));
         }
         else
         {
             baseLevel = this.BaseLevel;
         }
         mapLevelCount = args.MapLevelCount;
         num41 = baseLevel;
         mapLevelCount[num41] += num3;
         int num50 = num3 - 1;
         num = 0;
         while (num <= num50)
         {
             if (nodeArray[num].MirrorNum == 0)
             {
                 numArray2[num] = -1;
             }
             else
             {
                 int num51 = ((int) Math.Round((double) (((double) this.SymmetryBlockCount) / 2.0))) - 1;
                 num5 = 0;
                 while (num5 <= num51)
                 {
                     if (this.SymmetryBlocks[0].ReflectToNum[num5] == nodeArray[num].MirrorNum)
                     {
                         break;
                     }
                     num5++;
                 }
                 numArray2[num] = num5;
             }
             num++;
         }
         int num52 = this.SymmetryBlockCount - 1;
         num = 0;
         while (num <= num52)
         {
             num9 = (num * this.TopLeftPlayerCount) + num2;
             this.PlayerBases[num9].NodeCount = num3;
             this.PlayerBases[num9].Nodes = new clsPassageNode[(this.PlayerBases[num9].NodeCount - 1) + 1];
             int num53 = num3 - 1;
             num5 = 0;
             while (num5 <= num53)
             {
                 if (numArray2[num5] < 0)
                 {
                     this.PlayerBases[num9].Nodes[num5] = this.PassageNodes[num, nodeArray[num5].Num];
                 }
                 else
                 {
                     this.PlayerBases[num9].Nodes[num5] = this.PassageNodes[this.SymmetryBlocks[num].ReflectToNum[numArray2[num5]], nodeArray[num5].Num];
                 }
                 this.PlayerBases[num9].Nodes[num5].PlayerBaseNum = num9;
                 this.PlayerBases[num9].Nodes[num5].Level = baseLevel;
                 this.PassageNodesMinLevelSet(this.PlayerBases[num9].Nodes[num5], args.PassageNodesMinLevel, baseLevel, this.MaxLevelTransition);
                 this.PassageNodesMaxLevelSet(this.PlayerBases[num9].Nodes[num5], args.PassageNodesMaxLevel, baseLevel, this.MaxLevelTransition);
                 num5++;
             }
             _int5 = new modMath.sXY_int(_int4.X - 1, _int4.Y - 1);
             modMath.sXY_int _int3 = TileOrientation.GetRotatedPos(this.SymmetryBlocks[num].Orientation, this.PlayerBasePos[num2], _int5);
             this.PlayerBases[num9].Pos.X = (this.SymmetryBlocks[num].XYNum.X * _int4.X) + _int3.X;
             this.PlayerBases[num9].Pos.Y = (this.SymmetryBlocks[num].XYNum.Y * _int4.Y) + _int3.Y;
             num++;
         }
         num2++;
     }
     int num54 = this.PassageNodeCount - 1;
     for (num = 0; num <= num54; num++)
     {
         node = nodeArray3[num];
         if ((node.Level < 0) & !node.IsOnBorder)
         {
             int num20;
             int num22;
             int num21 = 0;
             int num55 = node.ConnectionCount - 1;
             num2 = 0;
             while (num2 <= num55)
             {
                 if (node.Connections[num2].GetOther().IsWater)
                 {
                     num21++;
                 }
                 num2++;
             }
             flag = true;
             int num56 = node.ConnectionCount - 1;
             num2 = 0;
             while (num2 <= num56)
             {
                 if (args.PassageNodesMinLevel.Nodes[node.Connections[num2].GetOther().Num] > 0)
                 {
                     flag = false;
                 }
                 num2++;
             }
             if (((flag & (((num21 == 0) & (num22 < this.WaterSpawnQuantity)) | ((num21 == 1) & ((this.TotalWaterQuantity - num20) > (this.WaterSpawnQuantity - num22))))) & (args.PassageNodesMinLevel.Nodes[node.Num] == 0)) & (num20 < this.TotalWaterQuantity))
             {
                 if (num21 == 0)
                 {
                     num22++;
                 }
                 num20++;
                 num5 = node.Num;
                 int num57 = this.SymmetryBlockCount - 1;
                 baseLevel = 0;
                 while (baseLevel <= num57)
                 {
                     this.PassageNodes[baseLevel, num5].IsWater = true;
                     this.PassageNodes[baseLevel, num5].Level = 0;
                     baseLevel++;
                 }
                 this.PassageNodesMinLevelSet(node, args.PassageNodesMinLevel, 0, this.MaxLevelTransition);
                 this.PassageNodesMaxLevelSet(node, args.PassageNodesMaxLevel, 0, this.MaxLevelTransition);
                 mapLevelCount = args.MapLevelCount;
                 num41 = 0;
                 mapLevelCount[num41]++;
                 int num58 = node.ConnectionCount - 1;
                 num2 = 0;
                 while (num2 <= num58)
                 {
                     other = node.Connections[num2].GetOther();
                     this.PassageNodesMinLevelSet(other, args.PassageNodesMinLevel, 0, this.MaxLevelTransition);
                     this.PassageNodesMaxLevelSet(other, args.PassageNodesMaxLevel, 0, this.MaxLevelTransition);
                     num2++;
                 }
             }
         }
     }
     args.FlatsCutoff = 1;
     args.PassagesCutoff = 1;
     args.VariationCutoff = 1;
     args.ActionTotal = 1;
     int num59 = this.PassageNodeCount - 1;
     for (num = 0; num <= num59; num++)
     {
         node = nodeArray3[num];
         if (((node.Level < 0) & !node.IsOnBorder) & node.IsNearBorder)
         {
             args.PassageNode = node;
             result3 = this.PassageNodeHeightLevel(args);
             if (!result3.Success)
             {
                 result4.ProblemAdd(result3.Problem);
                 return result4;
             }
         }
     }
     args.FlatsCutoff = this.FlatsChance;
     args.PassagesCutoff = args.FlatsCutoff + this.PassagesChance;
     args.VariationCutoff = args.PassagesCutoff + this.VariationChance;
     args.ActionTotal = args.VariationCutoff;
     if (args.ActionTotal <= 0)
     {
         result4.ProblemAdd("All height level behaviors are zero");
         return result4;
     }
     int num60 = this.PassageNodeCount - 1;
     for (num = 0; num <= num60; num++)
     {
         node = nodeArray3[num];
         if ((node.Level < 0) & !node.IsOnBorder)
         {
             args.PassageNode = node;
             result3 = this.PassageNodeHeightLevel(args);
             if (!result3.Success)
             {
                 result4.ProblemAdd(result3.Problem);
                 return result4;
             }
         }
     }
     int num61 = this.PassageNodeCount - 1;
     for (num = 0; num <= num61; num++)
     {
         node = this.PassageNodes[0, num];
         if (node.IsOnBorder)
         {
             if (node.Level >= 0)
             {
                 result4.ProblemAdd("Error: Border has had its height set.");
                 return result4;
             }
             node3 = null;
             flag = true;
             int num62 = node.ConnectionCount - 1;
             num2 = 0;
             while (num2 <= num62)
             {
                 other = node.Connections[num2].GetOther();
                 if ((((other.Level >= 0) & !other.IsOnBorder) && ((args.PassageNodesMinLevel.Nodes[node.Num] <= other.Level) & (args.PassageNodesMaxLevel.Nodes[node.Num] >= other.Level))) && (node3 == null))
                 {
                     node3 = other;
                 }
                 if (args.PassageNodesMinLevel.Nodes[other.Num] > 0)
                 {
                     flag = false;
                 }
                 num2++;
             }
             if (node3 != null)
             {
                 level = node3.Level;
                 this.PassageNodesMinLevelSet(node, args.PassageNodesMinLevel, level, this.MaxLevelTransition);
                 this.PassageNodesMaxLevelSet(node, args.PassageNodesMaxLevel, level, this.MaxLevelTransition);
                 int num63 = this.SymmetryBlockCount - 1;
                 baseLevel = 0;
                 while (baseLevel <= num63)
                 {
                     this.PassageNodes[baseLevel, num].IsWater = node3.IsWater & flag;
                     this.PassageNodes[baseLevel, num].Level = level;
                     baseLevel++;
                 }
                 if (node.IsWater)
                 {
                     int num64 = node.ConnectionCount - 1;
                     num2 = 0;
                     while (num2 <= num64)
                     {
                         other = node.Connections[num2].GetOther();
                         this.PassageNodesMinLevelSet(other, args.PassageNodesMinLevel, node.Level, this.MaxLevelTransition);
                         this.PassageNodesMaxLevelSet(other, args.PassageNodesMaxLevel, node.Level, this.MaxLevelTransition);
                         num2++;
                     }
                 }
             }
         }
         else if (node.Level < 0)
         {
             result4.ProblemAdd("Error: Node height not set");
             return result4;
         }
     }
     int num65 = this.PassageNodeCount - 1;
     for (num = 0; num <= num65; num++)
     {
         node = this.PassageNodes[0, num];
         if (node.IsOnBorder & (node.Level < 0))
         {
             node3 = null;
             flag = true;
             int num66 = node.ConnectionCount - 1;
             num2 = 0;
             while (num2 <= num66)
             {
                 other = node.Connections[num2].GetOther();
                 if (((other.Level >= 0) && ((args.PassageNodesMinLevel.Nodes[node.Num] <= other.Level) & (args.PassageNodesMaxLevel.Nodes[node.Num] >= other.Level))) && (node3 == null))
                 {
                     node3 = other;
                 }
                 if (args.PassageNodesMinLevel.Nodes[other.Num] > 0)
                 {
                     flag = false;
                 }
                 num2++;
             }
             if (node3 == null)
             {
                 result4.ProblemAdd("Error: No connection for border node");
                 return result4;
             }
             level = node3.Level;
             this.PassageNodesMinLevelSet(node, args.PassageNodesMinLevel, level, this.MaxLevelTransition);
             this.PassageNodesMaxLevelSet(node, args.PassageNodesMaxLevel, level, this.MaxLevelTransition);
             int num67 = this.SymmetryBlockCount - 1;
             for (baseLevel = 0; baseLevel <= num67; baseLevel++)
             {
                 this.PassageNodes[baseLevel, num].IsWater = node3.IsWater & flag;
                 this.PassageNodes[baseLevel, num].Level = level;
             }
             if (node.IsWater)
             {
                 int num68 = node.ConnectionCount - 1;
                 for (num2 = 0; num2 <= num68; num2++)
                 {
                     other = node.Connections[num2].GetOther();
                     this.PassageNodesMinLevelSet(other, args.PassageNodesMinLevel, node.Level, this.MaxLevelTransition);
                     this.PassageNodesMaxLevelSet(other, args.PassageNodesMaxLevel, node.Level, this.MaxLevelTransition);
                 }
             }
         }
     }
     this.RampBase = 1.0;
     this.MaxDisconnectionDist = 99999f;
     clsResult resultToAdd = this.GenerateRamps();
     result4.Add(resultToAdd);
     return result4;
 }
Exemple #3
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();
             }
         }
     }
 }
Exemple #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;
        }
Exemple #5
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;
 }
Exemple #6
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;
 }
Exemple #7
0
 private void btnGenerateRamps_Click(object sender, EventArgs e)
 {
     if (this.Generator.Map != null)
     {
         this.Generator.MaxDisconnectionDist = this.ValidateTextbox(this.txtRampDistance, 0.0, 99999.0, 128.0);
         this.Generator.RampBase = ((double) this.ValidateTextbox(this.txtRampBase, 10.0, 1000.0, 10.0)) / 1000.0;
         clsResult result = new clsResult("");
         this.lstResult_AddText("Generating ramps.");
         result = this.Generator.GenerateRamps();
         if (!result.HasProblems)
         {
             result.Add(this.FinishHeights());
         }
         this.lstResult_AddResult(result);
         if (result.HasProblems)
         {
             this.lstResult_AddText("Failed.");
         }
         else
         {
             this.lstResult_AddText("Done.");
         }
     }
 }
Exemple #8
0
        private void btnGenerateLayout_Click(object sender, EventArgs e)
        {
            this.lstResult.Items.Clear();
            this.btnGenerateLayout.Enabled = false;
            this.lstResult_AddText("Generating layout.");
            Application.DoEvents();
            this.StopTrying = false;
            this.Generator.ClearLayout();
            this.Generator.GenerateTileset = null;
            this.Generator.Map = null;
            this.Generator.TopLeftPlayerCount = this.PlayerCount;
            switch (this.cboSymmetry.SelectedIndex)
            {
                case 0:
                    this.Generator.SymmetryBlockCountXY.X = 1;
                    this.Generator.SymmetryBlockCountXY.Y = 1;
                    this.Generator.SymmetryBlockCount = 1;
                    this.Generator.SymmetryBlocks = new clsGenerateMap.sSymmetryBlock[(this.Generator.SymmetryBlockCount - 1) + 1];
                    this.Generator.SymmetryBlocks[0].XYNum = new modMath.sXY_int(0, 0);
                    this.Generator.SymmetryBlocks[0].Orientation = new TileOrientation.sTileOrientation(false, false, false);
                    this.Generator.SymmetryIsRotational = false;
                    break;

                case 1:
                    this.Generator.SymmetryBlockCountXY.X = 2;
                    this.Generator.SymmetryBlockCountXY.Y = 1;
                    this.Generator.SymmetryBlockCount = 2;
                    this.Generator.SymmetryBlocks = new clsGenerateMap.sSymmetryBlock[(this.Generator.SymmetryBlockCount - 1) + 1];
                    this.Generator.SymmetryBlocks[0].XYNum = new modMath.sXY_int(0, 0);
                    this.Generator.SymmetryBlocks[0].Orientation = new TileOrientation.sTileOrientation(false, false, false);
                    this.Generator.SymmetryBlocks[0].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[0].ReflectToNum[0] = 1;
                    this.Generator.SymmetryBlocks[1].XYNum = new modMath.sXY_int(1, 0);
                    this.Generator.SymmetryBlocks[1].Orientation = new TileOrientation.sTileOrientation(true, true, false);
                    this.Generator.SymmetryBlocks[1].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[1].ReflectToNum[0] = 0;
                    this.Generator.SymmetryIsRotational = true;
                    break;

                case 2:
                    this.Generator.SymmetryBlockCountXY.X = 1;
                    this.Generator.SymmetryBlockCountXY.Y = 2;
                    this.Generator.SymmetryBlockCount = 2;
                    this.Generator.SymmetryBlocks = new clsGenerateMap.sSymmetryBlock[(this.Generator.SymmetryBlockCount - 1) + 1];
                    this.Generator.SymmetryBlocks[0].XYNum = new modMath.sXY_int(0, 0);
                    this.Generator.SymmetryBlocks[0].Orientation = new TileOrientation.sTileOrientation(false, false, false);
                    this.Generator.SymmetryBlocks[0].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[0].ReflectToNum[0] = 1;
                    this.Generator.SymmetryBlocks[1].XYNum = new modMath.sXY_int(0, 1);
                    this.Generator.SymmetryBlocks[1].Orientation = new TileOrientation.sTileOrientation(true, true, false);
                    this.Generator.SymmetryBlocks[1].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[1].ReflectToNum[0] = 0;
                    this.Generator.SymmetryIsRotational = true;
                    break;

                case 3:
                    this.Generator.SymmetryBlockCountXY.X = 2;
                    this.Generator.SymmetryBlockCountXY.Y = 1;
                    this.Generator.SymmetryBlockCount = 2;
                    this.Generator.SymmetryBlocks = new clsGenerateMap.sSymmetryBlock[(this.Generator.SymmetryBlockCount - 1) + 1];
                    this.Generator.SymmetryBlocks[0].XYNum = new modMath.sXY_int(0, 0);
                    this.Generator.SymmetryBlocks[0].Orientation = new TileOrientation.sTileOrientation(false, false, false);
                    this.Generator.SymmetryBlocks[0].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[0].ReflectToNum[0] = 1;
                    this.Generator.SymmetryBlocks[1].XYNum = new modMath.sXY_int(1, 0);
                    this.Generator.SymmetryBlocks[1].Orientation = new TileOrientation.sTileOrientation(true, false, false);
                    this.Generator.SymmetryBlocks[1].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[1].ReflectToNum[0] = 0;
                    this.Generator.SymmetryIsRotational = false;
                    break;

                case 4:
                    this.Generator.SymmetryBlockCountXY.X = 1;
                    this.Generator.SymmetryBlockCountXY.Y = 2;
                    this.Generator.SymmetryBlockCount = 2;
                    this.Generator.SymmetryBlocks = new clsGenerateMap.sSymmetryBlock[(this.Generator.SymmetryBlockCount - 1) + 1];
                    this.Generator.SymmetryBlocks[0].XYNum = new modMath.sXY_int(0, 0);
                    this.Generator.SymmetryBlocks[0].Orientation = new TileOrientation.sTileOrientation(false, false, false);
                    this.Generator.SymmetryBlocks[0].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[0].ReflectToNum[0] = 1;
                    this.Generator.SymmetryBlocks[1].XYNum = new modMath.sXY_int(0, 1);
                    this.Generator.SymmetryBlocks[1].Orientation = new TileOrientation.sTileOrientation(false, true, false);
                    this.Generator.SymmetryBlocks[1].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[1].ReflectToNum[0] = 0;
                    this.Generator.SymmetryIsRotational = false;
                    break;

                case 5:
                    this.Generator.SymmetryBlockCountXY.X = 2;
                    this.Generator.SymmetryBlockCountXY.Y = 2;
                    this.Generator.SymmetryBlockCount = 4;
                    this.Generator.SymmetryBlocks = new clsGenerateMap.sSymmetryBlock[(this.Generator.SymmetryBlockCount - 1) + 1];
                    this.Generator.SymmetryBlocks[0].XYNum = new modMath.sXY_int(0, 0);
                    this.Generator.SymmetryBlocks[0].Orientation = new TileOrientation.sTileOrientation(false, false, false);
                    this.Generator.SymmetryBlocks[0].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[0].ReflectToNum[0] = 1;
                    this.Generator.SymmetryBlocks[0].ReflectToNum[1] = 2;
                    this.Generator.SymmetryBlocks[1].XYNum = new modMath.sXY_int(1, 0);
                    this.Generator.SymmetryBlocks[1].Orientation = new TileOrientation.sTileOrientation(true, false, true);
                    this.Generator.SymmetryBlocks[1].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[1].ReflectToNum[0] = 3;
                    this.Generator.SymmetryBlocks[1].ReflectToNum[1] = 0;
                    this.Generator.SymmetryBlocks[2].XYNum = new modMath.sXY_int(0, 1);
                    this.Generator.SymmetryBlocks[2].Orientation = new TileOrientation.sTileOrientation(false, true, true);
                    this.Generator.SymmetryBlocks[2].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[2].ReflectToNum[0] = 0;
                    this.Generator.SymmetryBlocks[2].ReflectToNum[1] = 3;
                    this.Generator.SymmetryBlocks[3].XYNum = new modMath.sXY_int(1, 1);
                    this.Generator.SymmetryBlocks[3].Orientation = new TileOrientation.sTileOrientation(true, true, false);
                    this.Generator.SymmetryBlocks[3].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[3].ReflectToNum[0] = 2;
                    this.Generator.SymmetryBlocks[3].ReflectToNum[1] = 1;
                    this.Generator.SymmetryIsRotational = true;
                    break;

                case 6:
                    this.Generator.SymmetryBlockCountXY.X = 2;
                    this.Generator.SymmetryBlockCountXY.Y = 2;
                    this.Generator.SymmetryBlockCount = 4;
                    this.Generator.SymmetryBlocks = new clsGenerateMap.sSymmetryBlock[(this.Generator.SymmetryBlockCount - 1) + 1];
                    this.Generator.SymmetryBlocks[0].XYNum = new modMath.sXY_int(0, 0);
                    this.Generator.SymmetryBlocks[0].Orientation = new TileOrientation.sTileOrientation(false, false, false);
                    this.Generator.SymmetryBlocks[0].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[0].ReflectToNum[0] = 1;
                    this.Generator.SymmetryBlocks[0].ReflectToNum[1] = 2;
                    this.Generator.SymmetryBlocks[1].XYNum = new modMath.sXY_int(1, 0);
                    this.Generator.SymmetryBlocks[1].Orientation = new TileOrientation.sTileOrientation(true, false, false);
                    this.Generator.SymmetryBlocks[1].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[1].ReflectToNum[0] = 0;
                    this.Generator.SymmetryBlocks[1].ReflectToNum[1] = 3;
                    this.Generator.SymmetryBlocks[2].XYNum = new modMath.sXY_int(0, 1);
                    this.Generator.SymmetryBlocks[2].Orientation = new TileOrientation.sTileOrientation(false, true, false);
                    this.Generator.SymmetryBlocks[2].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[2].ReflectToNum[0] = 3;
                    this.Generator.SymmetryBlocks[2].ReflectToNum[1] = 0;
                    this.Generator.SymmetryBlocks[3].XYNum = new modMath.sXY_int(1, 1);
                    this.Generator.SymmetryBlocks[3].Orientation = new TileOrientation.sTileOrientation(true, true, false);
                    this.Generator.SymmetryBlocks[3].ReflectToNum = new int[(((int) Math.Round((double) (((double) this.Generator.SymmetryBlockCount) / 2.0))) - 1) + 1];
                    this.Generator.SymmetryBlocks[3].ReflectToNum[0] = 2;
                    this.Generator.SymmetryBlocks[3].ReflectToNum[1] = 1;
                    this.Generator.SymmetryIsRotational = false;
                    break;

                default:
                    Interaction.MsgBox("Select symmetry", MsgBoxStyle.ApplicationModal, null);
                    this.btnGenerateLayout.Enabled = true;
                    return;
            }
            if ((this.Generator.TopLeftPlayerCount * this.Generator.SymmetryBlockCount) < 2)
            {
                Interaction.MsgBox("That configuration only produces 1 player.", MsgBoxStyle.ApplicationModal, null);
                this.btnGenerateLayout.Enabled = true;
            }
            else if ((this.Generator.TopLeftPlayerCount * this.Generator.SymmetryBlockCount) > 10)
            {
                Interaction.MsgBox("That configuration produces more than 10 players.", MsgBoxStyle.ApplicationModal, null);
                this.btnGenerateLayout.Enabled = true;
            }
            else
            {
                this.Generator.TileSize.X = this.ValidateTextbox(this.txtWidth, 48.0, 250.0, 1.0);
                this.Generator.TileSize.Y = this.ValidateTextbox(this.txtHeight, 48.0, 250.0, 1.0);
                if ((this.Generator.SymmetryBlockCount == 4) && ((this.Generator.TileSize.X != this.Generator.TileSize.Y) & this.Generator.SymmetryIsRotational))
                {
                    Interaction.MsgBox("Width and height must be equal if map is rotated on two axes.", MsgBoxStyle.ApplicationModal, null);
                    this.btnGenerateLayout.Enabled = true;
                }
                else
                {
                    clsResult result;
                    this.Generator.PlayerBasePos = new modMath.sXY_int[(this.Generator.TopLeftPlayerCount - 1) + 1];
                    double min = 12.0;
                    double x = Math.Min((double) (((double) this.Generator.TileSize.X) / ((double) this.Generator.SymmetryBlockCountXY.X)), (double) (this.Generator.TileSize.X - 12.0));
                    Position.XY_dbl _dbl = new Position.XY_dbl(x, Math.Min((double) (((double) this.Generator.TileSize.Y) / ((double) this.Generator.SymmetryBlockCountXY.Y)), (double) (this.Generator.TileSize.Y - 12.0)));
                    this.Generator.PlayerBasePos[0] = new modMath.sXY_int(this.ValidateTextbox(this.txt1x, min, _dbl.X, 128.0), this.ValidateTextbox(this.txt1y, min, _dbl.X, 128.0));
                    if (this.Generator.TopLeftPlayerCount >= 2)
                    {
                        this.Generator.PlayerBasePos[1] = new modMath.sXY_int(this.ValidateTextbox(this.txt2x, min, _dbl.X, 128.0), this.ValidateTextbox(this.txt2y, min, _dbl.Y, 128.0));
                        if (this.Generator.TopLeftPlayerCount >= 3)
                        {
                            this.Generator.PlayerBasePos[2] = new modMath.sXY_int(this.ValidateTextbox(this.txt3x, min, _dbl.X, 128.0), this.ValidateTextbox(this.txt3y, min, _dbl.Y, 128.0));
                            if (this.Generator.TopLeftPlayerCount >= 4)
                            {
                                this.Generator.PlayerBasePos[3] = new modMath.sXY_int(this.ValidateTextbox(this.txt4x, min, _dbl.X, 128.0), this.ValidateTextbox(this.txt4y, min, _dbl.Y, 128.0));
                                if (this.Generator.TopLeftPlayerCount >= 5)
                                {
                                    this.Generator.PlayerBasePos[4] = new modMath.sXY_int(this.ValidateTextbox(this.txt5x, min, _dbl.X, 128.0), this.ValidateTextbox(this.txt5y, min, _dbl.Y, 128.0));
                                    if (this.Generator.TopLeftPlayerCount >= 6)
                                    {
                                        this.Generator.PlayerBasePos[5] = new modMath.sXY_int(this.ValidateTextbox(this.txt6x, min, _dbl.X, 128.0), this.ValidateTextbox(this.txt6y, min, _dbl.Y, 128.0));
                                        if (this.Generator.TopLeftPlayerCount >= 7)
                                        {
                                            this.Generator.PlayerBasePos[6] = new modMath.sXY_int(this.ValidateTextbox(this.txt7x, min, _dbl.X, 128.0), this.ValidateTextbox(this.txt7y, min, _dbl.Y, 128.0));
                                            if (this.Generator.TopLeftPlayerCount >= 8)
                                            {
                                                this.Generator.PlayerBasePos[7] = new modMath.sXY_int(this.ValidateTextbox(this.txt8x, min, _dbl.X, 128.0), this.ValidateTextbox(this.txt8y, min, _dbl.Y, 128.0));
                                                if (this.Generator.TopLeftPlayerCount >= 9)
                                                {
                                                    this.Generator.PlayerBasePos[8] = new modMath.sXY_int(this.ValidateTextbox(this.txt9x, min, _dbl.X, 128.0), this.ValidateTextbox(this.txt9y, min, _dbl.Y, 128.0));
                                                    if (this.Generator.TopLeftPlayerCount >= 10)
                                                    {
                                                        this.Generator.PlayerBasePos[9] = new modMath.sXY_int(this.ValidateTextbox(this.txt10x, min, _dbl.X, 128.0), this.ValidateTextbox(this.txt10y, min, _dbl.Y, 128.0));
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    this.Generator.LevelCount = this.ValidateTextbox(this.txtLevels, 3.0, 5.0, 1.0);
                    this.Generator.BaseLevel = this.ValidateTextbox(this.txtBaseLevel, -1.0, (double) (this.Generator.LevelCount - 1), 1.0);
                    this.Generator.JitterScale = 1;
                    this.Generator.MaxLevelTransition = 2;
                    this.Generator.PassagesChance = this.ValidateTextbox(this.txtLevelFrequency, 0.0, 100.0, 1.0);
                    this.Generator.VariationChance = this.ValidateTextbox(this.txtVariation, 0.0, 100.0, 1.0);
                    this.Generator.FlatsChance = this.ValidateTextbox(this.txtFlatness, 0.0, 100.0, 1.0);
                    this.Generator.BaseFlatArea = this.ValidateTextbox(this.txtBaseArea, 1.0, 16.0, 1.0);
                    this.Generator.NodeScale = 4f;
                    this.Generator.WaterSpawnQuantity = this.ValidateTextbox(this.txtWaterQuantity, 0.0, 9999.0, 1.0);
                    this.Generator.TotalWaterQuantity = this.ValidateTextbox(this.txtConnectedWater, 0.0, 9999.0, 1.0);
                    Application.DoEvents();
                    int num2 = 0;
                    while (true)
                    {
                        result = new clsResult("");
                        result = this.Generator.GenerateLayout();
                        if (!result.HasProblems)
                        {
                            clsResult resultToAdd = this.FinishHeights();
                            result.Add(resultToAdd);
                            if (!resultToAdd.HasProblems)
                            {
                                this.lstResult_AddResult(result);
                                this.lstResult_AddText("Done.");
                                this.btnGenerateLayout.Enabled = true;
                                break;
                            }
                        }
                        num2++;
                        this.lstResult_AddText("Attempt " + Conversions.ToString(num2) + " failed.");
                        Application.DoEvents();
                        if (this.StopTrying)
                        {
                            this.Generator.Map = null;
                            this.lstResult_AddResult(result);
                            this.lstResult_AddText("Stopped.");
                            this.btnGenerateLayout.Enabled = true;
                            return;
                        }
                        this.lstResult_AddResult(result);
                        this.lstResult_AddText("Retrying...");
                        Application.DoEvents();
                        this.Generator.ClearLayout();
                    }
                    this.lstResult_AddResult(result);
                }
            }
        }
Exemple #9
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;
 }
Exemple #10
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;
 }