private bool IsPressed(modProgram.clsKeysActive KeysDown) { foreach (System.Windows.Forms.Keys keys in this.Keys) { if (!KeysDown.Keys[(int) keys]) { return false; } } foreach (System.Windows.Forms.Keys keys2 in this.UnlessKeys) { if (KeysDown.Keys[(int) keys2]) { return false; } } return true; }
public bool SetDroidType(modProgram.enumDroidType DroidType) { switch (DroidType) { case modProgram.enumDroidType.Weapon: this.TemplateDroidType = modProgram.TemplateDroidType_Droid; break; case modProgram.enumDroidType.Sensor: this.TemplateDroidType = modProgram.TemplateDroidType_Droid; break; case modProgram.enumDroidType.ECM: this.TemplateDroidType = modProgram.TemplateDroidType_Droid; break; case modProgram.enumDroidType.Construct: this.TemplateDroidType = modProgram.TemplateDroidType_Droid; break; case modProgram.enumDroidType.Person: this.TemplateDroidType = modProgram.TemplateDroidType_Person; break; case modProgram.enumDroidType.Cyborg: this.TemplateDroidType = modProgram.TemplateDroidType_Cyborg; break; case modProgram.enumDroidType.Transporter: this.TemplateDroidType = modProgram.TemplateDroidType_Transporter; break; case modProgram.enumDroidType.Command: this.TemplateDroidType = modProgram.TemplateDroidType_Droid; break; case modProgram.enumDroidType.Repair: this.TemplateDroidType = modProgram.TemplateDroidType_Droid; break; case modProgram.enumDroidType.Default_: this.TemplateDroidType = modProgram.TemplateDroidType_Null; break; case modProgram.enumDroidType.Cyborg_Construct: this.TemplateDroidType = modProgram.TemplateDroidType_CyborgConstruct; break; case modProgram.enumDroidType.Cyborg_Repair: this.TemplateDroidType = modProgram.TemplateDroidType_CyborgRepair; break; case modProgram.enumDroidType.Cyborg_Super: this.TemplateDroidType = modProgram.TemplateDroidType_CyborgSuper; break; default: this.TemplateDroidType = null; return false; } return true; }
public void Apply_Terrain_Fill(modProgram.enumFillCliffAction CliffAction, bool Inside) { clsMouseOver.clsOverTerrain mouseOverTerrain = this.GetMouseOverTerrain(); if (mouseOverTerrain != null) { modMath.sXY_int normal = mouseOverTerrain.Vertex.Normal; clsPainter.clsTerrain selectedTerrain = modProgram.SelectedTerrain; clsPainter.clsTerrain terrain = this.Map.Terrain.Vertices[normal.X, normal.Y].Terrain; if (selectedTerrain != terrain) { modMath.sXY_int[] _intArray = new modMath.sXY_int[0x80001]; _intArray[0] = normal; int index = 1; int num6 = 0; while (num6 < index) { bool flag; modMath.sXY_int vertexNum = _intArray[num6]; if (CliffAction == modProgram.enumFillCliffAction.StopBefore) { flag = this.Map.VertexIsCliffEdge(vertexNum); } else { flag = false; } bool flag2 = false; if (Inside) { if (vertexNum.X > 0) { if ((vertexNum.Y > 0) && ((this.Map.Terrain.Vertices[vertexNum.X - 1, vertexNum.Y - 1].Terrain != terrain) & (this.Map.Terrain.Vertices[vertexNum.X - 1, vertexNum.Y - 1].Terrain != selectedTerrain))) { flag2 = true; } if ((this.Map.Terrain.Vertices[vertexNum.X - 1, vertexNum.Y].Terrain != terrain) & (this.Map.Terrain.Vertices[vertexNum.X - 1, vertexNum.Y].Terrain != selectedTerrain)) { flag2 = true; } if ((vertexNum.Y < this.Map.Terrain.TileSize.Y) && ((this.Map.Terrain.Vertices[vertexNum.X - 1, vertexNum.Y + 1].Terrain != terrain) & (this.Map.Terrain.Vertices[vertexNum.X - 1, vertexNum.Y + 1].Terrain != selectedTerrain))) { flag2 = true; } } if ((vertexNum.Y > 0) && ((this.Map.Terrain.Vertices[vertexNum.X, vertexNum.Y - 1].Terrain != terrain) & (this.Map.Terrain.Vertices[vertexNum.X, vertexNum.Y - 1].Terrain != selectedTerrain))) { flag2 = true; } if (vertexNum.X < this.Map.Terrain.TileSize.X) { if ((vertexNum.Y > 0) && ((this.Map.Terrain.Vertices[vertexNum.X + 1, vertexNum.Y - 1].Terrain != terrain) & (this.Map.Terrain.Vertices[vertexNum.X + 1, vertexNum.Y - 1].Terrain != selectedTerrain))) { flag2 = true; } if ((this.Map.Terrain.Vertices[vertexNum.X + 1, vertexNum.Y].Terrain != terrain) & (this.Map.Terrain.Vertices[vertexNum.X + 1, vertexNum.Y].Terrain != selectedTerrain)) { flag2 = true; } if ((vertexNum.Y < this.Map.Terrain.TileSize.Y) && ((this.Map.Terrain.Vertices[vertexNum.X + 1, vertexNum.Y + 1].Terrain != terrain) & (this.Map.Terrain.Vertices[vertexNum.X + 1, vertexNum.Y + 1].Terrain != selectedTerrain))) { flag2 = true; } } if ((vertexNum.Y < this.Map.Terrain.TileSize.Y) && ((this.Map.Terrain.Vertices[vertexNum.X, vertexNum.Y + 1].Terrain != terrain) & (this.Map.Terrain.Vertices[vertexNum.X, vertexNum.Y + 1].Terrain != selectedTerrain))) { flag2 = true; } } if (!(flag | flag2) && (this.Map.Terrain.Vertices[vertexNum.X, vertexNum.Y].Terrain == terrain)) { modMath.sXY_int _int2; modMath.sXY_int _int4; this.Map.Terrain.Vertices[vertexNum.X, vertexNum.Y].Terrain = selectedTerrain; this.Map.SectorGraphicsChanges.VertexChanged(vertexNum); this.Map.SectorTerrainUndoChanges.VertexChanged(vertexNum); this.Map.AutoTextureChanges.VertexChanged(vertexNum); _int2.X = vertexNum.X + 1; _int2.Y = vertexNum.Y; if ((((_int2.X >= 0) & (_int2.X <= this.Map.Terrain.TileSize.X)) & (_int2.Y >= 0)) & (_int2.Y <= this.Map.Terrain.TileSize.Y)) { if (CliffAction == modProgram.enumFillCliffAction.StopAfter) { _int4 = new modMath.sXY_int(vertexNum.X, vertexNum.Y); flag = this.Map.SideHIsCliffOnBothSides(_int4); } else { flag = false; } if (!flag && (this.Map.Terrain.Vertices[_int2.X, _int2.Y].Terrain == terrain)) { if (_intArray.GetUpperBound(0) < index) { _intArray = (modMath.sXY_int[]) Utils.CopyArray((Array) _intArray, new modMath.sXY_int[((index * 2) + 1) + 1]); } _intArray[index] = _int2; index++; } } _int2.X = vertexNum.X - 1; _int2.Y = vertexNum.Y; if ((((_int2.X >= 0) & (_int2.X <= this.Map.Terrain.TileSize.X)) & (_int2.Y >= 0)) & (_int2.Y <= this.Map.Terrain.TileSize.Y)) { if (CliffAction == modProgram.enumFillCliffAction.StopAfter) { _int4 = new modMath.sXY_int(vertexNum.X - 1, vertexNum.Y); flag = this.Map.SideHIsCliffOnBothSides(_int4); } else { flag = false; } if (!flag && (this.Map.Terrain.Vertices[_int2.X, _int2.Y].Terrain == terrain)) { if (_intArray.GetUpperBound(0) < index) { _intArray = (modMath.sXY_int[]) Utils.CopyArray((Array) _intArray, new modMath.sXY_int[((index * 2) + 1) + 1]); } _intArray[index] = _int2; index++; } } _int2.X = vertexNum.X; _int2.Y = vertexNum.Y + 1; if ((((_int2.X >= 0) & (_int2.X <= this.Map.Terrain.TileSize.X)) & (_int2.Y >= 0)) & (_int2.Y <= this.Map.Terrain.TileSize.Y)) { if (CliffAction == modProgram.enumFillCliffAction.StopAfter) { _int4 = new modMath.sXY_int(vertexNum.X, vertexNum.Y); flag = this.Map.SideVIsCliffOnBothSides(_int4); } else { flag = false; } if (!flag && (this.Map.Terrain.Vertices[_int2.X, _int2.Y].Terrain == terrain)) { if (_intArray.GetUpperBound(0) < index) { _intArray = (modMath.sXY_int[]) Utils.CopyArray((Array) _intArray, new modMath.sXY_int[((index * 2) + 1) + 1]); } _intArray[index] = _int2; index++; } } _int2.X = vertexNum.X; _int2.Y = vertexNum.Y - 1; if ((((_int2.X >= 0) & (_int2.X <= this.Map.Terrain.TileSize.X)) & (_int2.Y >= 0)) & (_int2.Y <= this.Map.Terrain.TileSize.Y)) { if (CliffAction == modProgram.enumFillCliffAction.StopAfter) { _int4 = new modMath.sXY_int(vertexNum.X, vertexNum.Y - 1); flag = this.Map.SideVIsCliffOnBothSides(_int4); } else { flag = false; } if (!flag && (this.Map.Terrain.Vertices[_int2.X, _int2.Y].Terrain == terrain)) { if (_intArray.GetUpperBound(0) < index) { _intArray = (modMath.sXY_int[]) Utils.CopyArray((Array) _intArray, new modMath.sXY_int[((index * 2) + 1) + 1]); } _intArray[index] = _int2; index++; } } } num6++; if (num6 >= 0x20000) { int num4 = index - num6; int num2 = Math.Min(num6, num4); int num3 = index - num2; int num7 = num2 - 1; for (int i = 0; i <= num7; i++) { _intArray[i] = _intArray[num3 + i]; } index -= num6; num6 = 0; if ((index * 3) < (_intArray.GetUpperBound(0) + 1)) { _intArray = (modMath.sXY_int[]) Utils.CopyArray((Array) _intArray, new modMath.sXY_int[((index * 2) + 1) + 1]); } } } this.Map.Update(); this.Map.UndoStepCreate("Ground Fill"); this.MapView.DrawViewLater(); } } }
public bool ScreenXY_Get_TerrainPos(modMath.sXY_int ScreenPos, ref modProgram.sWorldPos ResultPos) { try { Position.XYZ_dbl _dbl; Position.XY_dbl _dbl3; Position.XY_dbl _dbl4; modMath.sXY_int _int; modMath.sXY_int _int2; Position.XYZ_dbl _dbl5; Position.XYZ_dbl _dbl6; Position.XYZ_dbl _dbl8; _dbl5.X = this.ViewPos.X; _dbl5.Y = this.ViewPos.Y; _dbl5.Z = 0 - this.ViewPos.Z; _dbl8.X = (ScreenPos.X - (((double) this.MapView.GLSize.X) / 2.0)) * this.FOVMultiplier; _dbl8.Y = ((((double) this.MapView.GLSize.Y) / 2.0) - ScreenPos.Y) * this.FOVMultiplier; _dbl8.Z = 1.0; Matrix3DMath.VectorRotationByMatrix(this.ViewAngleMatrix, _dbl8, ref _dbl6); _dbl6.Y = -_dbl6.Y; _dbl6.Z = -_dbl6.Z; double num2 = (_dbl5.Y - (0xff * this.Map.HeightMultiplier)) / _dbl6.Y; _dbl3.X = _dbl5.X + (_dbl6.X * num2); _dbl3.Y = _dbl5.Z + (_dbl6.Z * num2); num2 = _dbl5.Y / _dbl6.Y; _dbl4.X = _dbl5.X + (_dbl6.X * num2); _dbl4.Y = _dbl5.Z + (_dbl6.Z * num2); _int2.X = Math.Max((int) Math.Round(Conversion.Int((double) (Math.Min(_dbl3.X, _dbl4.X) / 128.0))), 0); _int2.Y = Math.Max((int) Math.Round(Conversion.Int((double) (Math.Min(_dbl3.Y, _dbl4.Y) / 128.0))), 0); _int.X = Math.Min((int) Math.Round(Conversion.Int((double) (Math.Max(_dbl3.X, _dbl4.X) / 128.0))), this.Map.Terrain.TileSize.X - 1); _int.Y = Math.Min((int) Math.Round(Conversion.Int((double) (Math.Max(_dbl3.Y, _dbl4.Y) / 128.0))), this.Map.Terrain.TileSize.Y - 1); double maxValue = double.MaxValue; _dbl.X = double.NaN; _dbl.Y = double.NaN; _dbl.Z = double.NaN; int y = _int.Y; for (int i = _int2.Y; i <= y; i++) { int x = _int.X; for (int j = _int2.X; j <= x; j++) { Position.XYZ_dbl _dbl2; double magnitude; double num4; double num5; Position.XY_dbl _dbl7; double num6; double num7; double num8; _dbl7.X = j * 0x80; _dbl7.Y = i * 0x80; if (this.Map.Terrain.Tiles[j, i].Tri) { num8 = this.Map.Terrain.Vertices[j, i].Height * this.Map.HeightMultiplier; num6 = (this.Map.Terrain.Vertices[j + 1, i].Height * this.Map.HeightMultiplier) - num8; num7 = (this.Map.Terrain.Vertices[j, i + 1].Height * this.Map.HeightMultiplier) - num8; _dbl8.Y = (num8 + ((((num6 * (_dbl5.X - _dbl7.X)) + (num7 * (_dbl5.Z - _dbl7.Y))) + ((((num6 * _dbl6.X) + (num7 * _dbl6.Z)) * _dbl5.Y) / _dbl6.Y)) / 128.0)) / (1.0 + (((num6 * _dbl6.X) + (num7 * _dbl6.Z)) / (_dbl6.Y * 128.0))); _dbl8.X = _dbl5.X + ((_dbl6.X * (_dbl5.Y - _dbl8.Y)) / _dbl6.Y); _dbl8.Z = _dbl5.Z + ((_dbl6.Z * (_dbl5.Y - _dbl8.Y)) / _dbl6.Y); num4 = (_dbl8.X / 128.0) - j; num5 = (_dbl8.Z / 128.0) - i; if (((((num5 <= (1.0 - num4)) & (num4 >= 0.0)) & (num5 >= 0.0)) & (num4 <= 1.0)) & (num5 <= 1.0)) { _dbl2 = _dbl8 - _dbl5; magnitude = _dbl2.GetMagnitude(); if (magnitude < maxValue) { maxValue = magnitude; _dbl = _dbl8; } } num8 = this.Map.Terrain.Vertices[j + 1, i + 1].Height * this.Map.HeightMultiplier; num6 = (this.Map.Terrain.Vertices[j, i + 1].Height * this.Map.HeightMultiplier) - num8; num7 = (this.Map.Terrain.Vertices[j + 1, i].Height * this.Map.HeightMultiplier) - num8; _dbl8.Y = (((num8 + num6) + num7) + ((((num6 * (_dbl7.X - _dbl5.X)) + (num7 * (_dbl7.Y - _dbl5.Z))) - ((((num6 * _dbl6.X) + (num7 * _dbl6.Z)) * _dbl5.Y) / _dbl6.Y)) / 128.0)) / (1.0 - (((num6 * _dbl6.X) + (num7 * _dbl6.Z)) / (_dbl6.Y * 128.0))); _dbl8.X = _dbl5.X + ((_dbl6.X * (_dbl5.Y - _dbl8.Y)) / _dbl6.Y); _dbl8.Z = _dbl5.Z + ((_dbl6.Z * (_dbl5.Y - _dbl8.Y)) / _dbl6.Y); num4 = (_dbl8.X / 128.0) - j; num5 = (_dbl8.Z / 128.0) - i; if (((((num5 >= (1.0 - num4)) & (num4 >= 0.0)) & (num5 >= 0.0)) & (num4 <= 1.0)) & (num5 <= 1.0)) { _dbl2 = _dbl8 - _dbl5; magnitude = _dbl2.GetMagnitude(); if (magnitude < maxValue) { maxValue = magnitude; _dbl = _dbl8; } } } else { num8 = this.Map.Terrain.Vertices[j + 1, i].Height * this.Map.HeightMultiplier; num6 = (this.Map.Terrain.Vertices[j, i].Height * this.Map.HeightMultiplier) - num8; num7 = (this.Map.Terrain.Vertices[j + 1, i + 1].Height * this.Map.HeightMultiplier) - num8; _dbl8.Y = ((num8 + num6) + ((((num6 * (_dbl7.X - _dbl5.X)) + (num7 * (_dbl5.Z - _dbl7.Y))) - ((((num6 * _dbl6.X) - (num7 * _dbl6.Z)) * _dbl5.Y) / _dbl6.Y)) / 128.0)) / (1.0 - (((num6 * _dbl6.X) - (num7 * _dbl6.Z)) / (_dbl6.Y * 128.0))); _dbl8.X = _dbl5.X + ((_dbl6.X * (_dbl5.Y - _dbl8.Y)) / _dbl6.Y); _dbl8.Z = _dbl5.Z + ((_dbl6.Z * (_dbl5.Y - _dbl8.Y)) / _dbl6.Y); num4 = (_dbl8.X / 128.0) - j; num5 = (_dbl8.Z / 128.0) - i; if (((((num5 <= num4) & (num4 >= 0.0)) & (num5 >= 0.0)) & (num4 <= 1.0)) & (num5 <= 1.0)) { _dbl2 = _dbl8 - _dbl5; magnitude = _dbl2.GetMagnitude(); if (magnitude < maxValue) { maxValue = magnitude; _dbl = _dbl8; } } num8 = this.Map.Terrain.Vertices[j, i + 1].Height * this.Map.HeightMultiplier; num6 = (this.Map.Terrain.Vertices[j + 1, i + 1].Height * this.Map.HeightMultiplier) - num8; num7 = (this.Map.Terrain.Vertices[j, i].Height * this.Map.HeightMultiplier) - num8; _dbl8.Y = ((num8 + num7) + ((((num6 * (_dbl5.X - _dbl7.X)) + (num7 * (_dbl7.Y - _dbl5.Z))) + ((((num6 * _dbl6.X) - (num7 * _dbl6.Z)) * _dbl5.Y) / _dbl6.Y)) / 128.0)) / (1.0 + (((num6 * _dbl6.X) - (num7 * _dbl6.Z)) / (_dbl6.Y * 128.0))); _dbl8.X = _dbl5.X + ((_dbl6.X * (_dbl5.Y - _dbl8.Y)) / _dbl6.Y); _dbl8.Z = _dbl5.Z + ((_dbl6.Z * (_dbl5.Y - _dbl8.Y)) / _dbl6.Y); num4 = (_dbl8.X / 128.0) - j; num5 = (_dbl8.Z / 128.0) - i; if (((((num5 >= num4) & (num4 >= 0.0)) & (num5 >= 0.0)) & (num4 <= 1.0)) & (num5 <= 1.0)) { magnitude = (_dbl8 - _dbl5).GetMagnitude(); if (magnitude < maxValue) { maxValue = magnitude; _dbl = _dbl8; } } } } } if (_dbl.X == double.NaN) { return false; } ResultPos.Horizontal.X = (int) Math.Round(_dbl.X); ResultPos.Altitude = (int) Math.Round(_dbl.Y); ResultPos.Horizontal.Y = (int) Math.Round(_dbl.Z); } catch (Exception exception1) { ProjectData.SetProjectError(exception1); ProjectData.ClearProjectError(); return false; } return true; }
public void KeysChanged(modProgram.clsKeysActive KeysDown) { this._Active = this.IsPressed(KeysDown); }
public clsMap.clsUnit PlaceUnit(clsUnitType Type, modProgram.sWorldPos Pos, clsMap.clsUnitGroup UnitGroup, int Rotation) { modMath.sXY_int _int; modMath.sXY_int _int3; modMath.sXY_int _int4; clsMap.clsUnitAdd add = new clsMap.clsUnitAdd { Map = this.Map, StoreChange = true }; clsMap.clsUnit unit = new clsMap.clsUnit(); add.NewUnit = unit; unit.Type = Type; unit.UnitGroup = UnitGroup; _int.X = (int) Math.Round(((double) (((double) Pos.Horizontal.X) / 128.0))); _int.Y = (int) Math.Round(((double) (((double) Pos.Horizontal.Y) / 128.0))); modMath.sXY_int _int2 = Type.get_GetFootprintSelected(Rotation); unit.Pos = Pos; _int3.X = (int) Math.Round(((double) (((((double) unit.Pos.Horizontal.X) / 128.0) - (((double) _int2.X) / 2.0)) + 0.5))); _int3.Y = (int) Math.Round(((double) (((((double) unit.Pos.Horizontal.Y) / 128.0) - (((double) _int2.Y) / 2.0)) + 0.5))); _int4.X = (int) Math.Round(((double) (((((double) unit.Pos.Horizontal.X) / 128.0) + (((double) _int2.X) / 2.0)) - 0.5))); _int4.Y = (int) Math.Round(((double) (((((double) unit.Pos.Horizontal.Y) / 128.0) + (((double) _int2.Y) / 2.0)) - 0.5))); unit.Rotation = Rotation; add.Perform(); int num3 = Math.Min(_int4.Y, this.Map.Terrain.TileSize.Y - 1); for (int i = Math.Max(_int3.Y, 0); i <= num3; i++) { int num4 = Math.Min(_int4.X, this.Map.Terrain.TileSize.X - 1); for (int j = Math.Max(_int3.X, 0); j <= num4; j++) { this.TileNodeBlock(j, i); } } this.TilePathMap.FindCalc(); return unit; }
public static bool WZAngleFromINIText(string Text, ref modProgram.sWZAngle Result) { modProgram.sWZAngle angle; clsSplitCommaText text = new clsSplitCommaText(Text); if (text.PartCount != 3) { return false; } if (!InvariantParse_ushort(text.Parts[0], ref angle.Direction)) { int num; int remaidner; if (!InvariantParse_int(text.Parts[0], ref num)) { return false; } int mulitplaier = Math.DivRem(num, 0x10000, out remaidner); try { if (remaidner < 0) { angle.Direction = (ushort) (remaidner + 0x10000); } else { angle.Direction = (ushort) remaidner; } } catch (Exception exception1) { ProjectData.SetProjectError(exception1); Exception exception = exception1; ProjectData.ClearProjectError(); return false; } return true; } if (!InvariantParse_ushort(text.Parts[1], ref angle.Pitch)) { return false; } if (!InvariantParse_ushort(text.Parts[2], ref angle.Roll)) { return false; } Result = angle; return true; }
public static bool WorldPosFromINIText(string Text, ref modProgram.clsWorldPos Result) { clsSplitCommaText text = new clsSplitCommaText(Text); if (text.PartCount != 3) { return false; } int[] numArray = new int[3]; int index = 0; do { int num2; if (InvariantParse_int(text.Parts[index], ref num2)) { numArray[index] = num2; } else { return false; } index++; } while (index <= 2); modMath.sXY_int newHorizontal = new modMath.sXY_int(numArray[0], numArray[1]); modProgram.sWorldPos newWorldPos = new modProgram.sWorldPos(newHorizontal, numArray[2]); Result = new modProgram.clsWorldPos(newWorldPos); return true; }
public clsWorldPos(modProgram.sWorldPos NewWorldPos) { this.WorldPos = NewWorldPos; }