public void MouseOver_Pos_Calc() { var xY_dbl = default(XYDouble); var flag = default(bool); var footprint = new XYInt(); var mouseLeftDownOverMinimap = GetMouseLeftDownOverMinimap(); if ( mouseLeftDownOverMinimap != null ) { if ( MouseOver == null ) { } else if ( IsViewPosOverMinimap(MouseOver.ScreenPos) ) { var Pos = new XYInt((int)(MouseOver.ScreenPos.X * Tiles_Per_Minimap_Pixel), (int)((MouseOver.ScreenPos.Y * Tiles_Per_Minimap_Pixel))); Map.TileNumClampToMap(Pos); LookAtTile(Pos); } } else { var mouseOverTerrain = new clsMouseOver.clsOverTerrain(); flag = false; if ( SettingsManager.Settings.DirectPointer ) { if ( ScreenXY_Get_TerrainPos(MouseOver.ScreenPos, ref mouseOverTerrain.Pos) ) { if ( Map.PosIsOnMap(mouseOverTerrain.Pos.Horizontal) ) { flag = true; } } } else { mouseOverTerrain.Pos.Altitude = (int)(255.0D / 2.0D * Map.HeightMultiplier); if ( ScreenXY_Get_ViewPlanePos(MouseOver.ScreenPos, mouseOverTerrain.Pos.Altitude, ref xY_dbl) ) { mouseOverTerrain.Pos.Horizontal.X = (int)xY_dbl.X; mouseOverTerrain.Pos.Horizontal.Y = Convert.ToInt32(- xY_dbl.Y); if ( Map.PosIsOnMap(mouseOverTerrain.Pos.Horizontal) ) { mouseOverTerrain.Pos.Altitude = (int)(Map.GetTerrainHeight(mouseOverTerrain.Pos.Horizontal)); flag = true; } } } if ( flag ) { MouseOver.OverTerrain = mouseOverTerrain; mouseOverTerrain.Tile.Normal.X = (int)((double)mouseOverTerrain.Pos.Horizontal.X / Constants.TerrainGridSpacing); mouseOverTerrain.Tile.Normal.Y = (int)(((double)mouseOverTerrain.Pos.Horizontal.Y / Constants.TerrainGridSpacing)); mouseOverTerrain.Vertex.Normal.X = (int)(Math.Round(((double)mouseOverTerrain.Pos.Horizontal.X / Constants.TerrainGridSpacing))); mouseOverTerrain.Vertex.Normal.Y = (int)(Math.Round(((double)mouseOverTerrain.Pos.Horizontal.Y / Constants.TerrainGridSpacing))); mouseOverTerrain.Tile.Alignment = mouseOverTerrain.Vertex.Normal; mouseOverTerrain.Vertex.Alignment = new XYInt(mouseOverTerrain.Tile.Normal.X + 1, mouseOverTerrain.Tile.Normal.Y + 1); mouseOverTerrain.Triangle = Map.GetTerrainTri(mouseOverTerrain.Pos.Horizontal); xY_dbl.X = mouseOverTerrain.Pos.Horizontal.X - mouseOverTerrain.Vertex.Normal.X * Constants.TerrainGridSpacing; xY_dbl.Y = mouseOverTerrain.Pos.Horizontal.Y - mouseOverTerrain.Vertex.Normal.Y * Constants.TerrainGridSpacing; if ( Math.Abs(xY_dbl.Y) <= Math.Abs(xY_dbl.X) ) { mouseOverTerrain.Side_IsV = false; mouseOverTerrain.Side_Num.X = mouseOverTerrain.Tile.Normal.X; mouseOverTerrain.Side_Num.Y = mouseOverTerrain.Vertex.Normal.Y; } else { mouseOverTerrain.Side_IsV = true; mouseOverTerrain.Side_Num.X = mouseOverTerrain.Vertex.Normal.X; mouseOverTerrain.Side_Num.Y = mouseOverTerrain.Tile.Normal.Y; } var sectorNum = Map.GetPosSectorNum(mouseOverTerrain.Pos.Horizontal); var unit = default(clsUnit); var connection = default(clsUnitSectorConnection); foreach ( var tempLoopVar_Connection in Map.Sectors[sectorNum.X, sectorNum.Y].Units ) { connection = tempLoopVar_Connection; unit = connection.Unit; xY_dbl.X = unit.Pos.Horizontal.X - mouseOverTerrain.Pos.Horizontal.X; xY_dbl.Y = unit.Pos.Horizontal.Y - mouseOverTerrain.Pos.Horizontal.Y; footprint = unit.TypeBase.get_GetFootprintSelected(unit.Rotation); if ( Math.Abs(xY_dbl.X) <= Math.Max(footprint.X / 2.0D, 0.5D) * Constants.TerrainGridSpacing && Math.Abs(xY_dbl.Y) <= Math.Max(footprint.Y / 2.0D, 0.5D) * Constants.TerrainGridSpacing ) { mouseOverTerrain.Units.Add(unit); } } if ( MouseLeftDown != null ) { if ( modTools.Tool == modTools.Tools.TerrainBrush ) { Apply_Terrain(); if ( Program.frmMainInstance.cbxAutoTexSetHeight.Checked ) { Apply_Height_Set(App.TerrainBrush, Program.frmMainInstance.HeightSetPalette[Program.frmMainInstance.tabHeightSetL.SelectedIndex]); } } else if ( modTools.Tool == modTools.Tools.HeightSetBrush ) { Apply_Height_Set(App.HeightBrush, Program.frmMainInstance.HeightSetPalette[Program.frmMainInstance.tabHeightSetL.SelectedIndex]); } else if ( modTools.Tool == modTools.Tools.TextureBrush ) { Apply_Texture(); } else if ( modTools.Tool == modTools.Tools.CliffTriangle ) { Apply_CliffTriangle(false); } else if ( modTools.Tool == modTools.Tools.CliffBrush ) { Apply_Cliff(); } else if ( modTools.Tool == modTools.Tools.CliffRemove ) { Apply_Cliff_Remove(); } else if ( modTools.Tool == modTools.Tools.RoadPlace ) { Apply_Road(); } else if ( modTools.Tool == modTools.Tools.RoadRemove ) { Apply_Road_Remove(); } } if ( MouseRightDown != null ) { if ( modTools.Tool == modTools.Tools.HeightSetBrush ) { if ( MouseLeftDown == null ) { Apply_Height_Set(App.HeightBrush, Program.frmMainInstance.HeightSetPalette[Program.frmMainInstance.tabHeightSetR.SelectedIndex]); } } else if ( modTools.Tool == modTools.Tools.CliffTriangle ) { Apply_CliffTriangle(true); } } } } MapViewControl.Pos_Display_Update(); MapViewControl.DrawViewLater(); }
public void MouseOver_Pos_Calc() { if (this.GetMouseLeftDownOverMinimap() != null) { if ((this.MouseOver != null) && this.IsViewPosOverMinimap(this.MouseOver.ScreenPos)) { modMath.sXY_int tileNum = new modMath.sXY_int((int) Math.Round(Conversion.Int((double) (this.MouseOver.ScreenPos.X * this.Tiles_Per_Minimap_Pixel))), (int) Math.Round(Conversion.Int((double) (this.MouseOver.ScreenPos.Y * this.Tiles_Per_Minimap_Pixel)))); this.Map.TileNumClampToMap(tileNum); this.LookAtTile(tileNum); } } else { Position.XY_dbl _dbl; clsMouseOver.clsOverTerrain terrain = new clsMouseOver.clsOverTerrain(); bool flag = false; if (modSettings.Settings.DirectPointer) { if (this.ScreenXY_Get_TerrainPos(this.MouseOver.ScreenPos, ref terrain.Pos) && this.Map.PosIsOnMap(terrain.Pos.Horizontal)) { flag = true; } } else { terrain.Pos.Altitude = (int) Math.Round((double) (127.5 * this.Map.HeightMultiplier)); if (this.ScreenXY_Get_ViewPlanePos(this.MouseOver.ScreenPos, (double) terrain.Pos.Altitude, ref _dbl)) { terrain.Pos.Horizontal.X = (int) Math.Round(_dbl.X); terrain.Pos.Horizontal.Y = (int) Math.Round(-_dbl.Y); if (this.Map.PosIsOnMap(terrain.Pos.Horizontal)) { terrain.Pos.Altitude = (int) Math.Round(this.Map.GetTerrainHeight(terrain.Pos.Horizontal)); flag = true; } } } if (flag) { IEnumerator enumerator; this.MouseOver.OverTerrain = terrain; terrain.Tile.Normal.X = (int) Math.Round(Conversion.Int((double) (((double) terrain.Pos.Horizontal.X) / 128.0))); terrain.Tile.Normal.Y = (int) Math.Round(Conversion.Int((double) (((double) terrain.Pos.Horizontal.Y) / 128.0))); terrain.Vertex.Normal.X = (int) Math.Round(Math.Round((double) (((double) terrain.Pos.Horizontal.X) / 128.0))); terrain.Vertex.Normal.Y = (int) Math.Round(Math.Round((double) (((double) terrain.Pos.Horizontal.Y) / 128.0))); terrain.Tile.Alignment = terrain.Vertex.Normal; terrain.Vertex.Alignment = new modMath.sXY_int(terrain.Tile.Normal.X + 1, terrain.Tile.Normal.Y + 1); terrain.Triangle = this.Map.GetTerrainTri(terrain.Pos.Horizontal); _dbl.X = terrain.Pos.Horizontal.X - (terrain.Vertex.Normal.X * 0x80); _dbl.Y = terrain.Pos.Horizontal.Y - (terrain.Vertex.Normal.Y * 0x80); double introduced10 = Math.Abs(_dbl.Y); if (introduced10 <= Math.Abs(_dbl.X)) { terrain.Side_IsV = false; terrain.Side_Num.X = terrain.Tile.Normal.X; terrain.Side_Num.Y = terrain.Vertex.Normal.Y; } else { terrain.Side_IsV = true; terrain.Side_Num.X = terrain.Vertex.Normal.X; terrain.Side_Num.Y = terrain.Tile.Normal.Y; } modMath.sXY_int posSectorNum = this.Map.GetPosSectorNum(terrain.Pos.Horizontal); try { enumerator = this.Map.Sectors[posSectorNum.X, posSectorNum.Y].Units.GetEnumerator(); while (enumerator.MoveNext()) { clsMap.clsUnitSectorConnection current = (clsMap.clsUnitSectorConnection) enumerator.Current; clsMap.clsUnit newItem = current.Unit; _dbl.X = newItem.Pos.Horizontal.X - terrain.Pos.Horizontal.X; _dbl.Y = newItem.Pos.Horizontal.Y - terrain.Pos.Horizontal.Y; modMath.sXY_int _int = newItem.Type.get_GetFootprintSelected(newItem.Rotation); if ((Math.Abs(_dbl.X) <= (Math.Max((double) (((double) _int.X) / 2.0), (double) 0.5) * 128.0)) & (Math.Abs(_dbl.Y) <= (Math.Max((double) (((double) _int.Y) / 2.0), (double) 0.5) * 128.0))) { terrain.Units.Add(newItem); } } } finally { if (enumerator is IDisposable) { (enumerator as IDisposable).Dispose(); } } if (this.MouseLeftDown != null) { if (modTools.Tool == modTools.Tools.TerrainBrush) { this.Apply_Terrain(); if (modMain.frmMainInstance.cbxAutoTexSetHeight.Checked) { this.Apply_Height_Set(modProgram.TerrainBrush, modMain.frmMainInstance.HeightSetPalette[modMain.frmMainInstance.tabHeightSetL.SelectedIndex]); } } else if (modTools.Tool == modTools.Tools.HeightSetBrush) { this.Apply_Height_Set(modProgram.HeightBrush, modMain.frmMainInstance.HeightSetPalette[modMain.frmMainInstance.tabHeightSetL.SelectedIndex]); } else if (modTools.Tool == modTools.Tools.TextureBrush) { this.Apply_Texture(); } else if (modTools.Tool == modTools.Tools.CliffTriangle) { this.Apply_CliffTriangle(false); } else if (modTools.Tool == modTools.Tools.CliffBrush) { this.Apply_Cliff(); } else if (modTools.Tool == modTools.Tools.CliffRemove) { this.Apply_Cliff_Remove(); } else if (modTools.Tool == modTools.Tools.RoadPlace) { this.Apply_Road(); } else if (modTools.Tool == modTools.Tools.RoadRemove) { this.Apply_Road_Remove(); } } if (this.MouseRightDown != null) { if (modTools.Tool == modTools.Tools.HeightSetBrush) { if (this.MouseLeftDown == null) { this.Apply_Height_Set(modProgram.HeightBrush, modMain.frmMainInstance.HeightSetPalette[modMain.frmMainInstance.tabHeightSetR.SelectedIndex]); } } else if (modTools.Tool == modTools.Tools.CliffTriangle) { this.Apply_CliffTriangle(true); } } } } this.MapView.Pos_Display_Update(); this.MapView.DrawViewLater(); }
public void MouseOver_Pos_Calc() { Position.XY_dbl XY_dbl = default(Position.XY_dbl); bool Flag = default(bool); sXY_int Footprint = new sXY_int(); clsMouseDown.clsOverMinimap MouseLeftDownOverMinimap = GetMouseLeftDownOverMinimap(); if ( MouseLeftDownOverMinimap != null ) { if ( MouseOver == null ) { } else if ( IsViewPosOverMinimap(MouseOver.ScreenPos) ) { sXY_int Pos = new sXY_int((int)Conversion.Int(MouseOver.ScreenPos.X * Tiles_Per_Minimap_Pixel), (int)(Conversion.Int(MouseOver.ScreenPos.Y * Tiles_Per_Minimap_Pixel))); Map.TileNumClampToMap(Pos); LookAtTile(Pos); } } else { clsMouseOver.clsOverTerrain MouseOverTerrain = new clsMouseOver.clsOverTerrain(); Flag = false; if ( SettingsManager.Settings.DirectPointer ) { if ( ScreenXY_Get_TerrainPos(MouseOver.ScreenPos, MouseOverTerrain.Pos) ) { if ( Map.PosIsOnMap(MouseOverTerrain.Pos.Horizontal) ) { Flag = true; } } } else { MouseOverTerrain.Pos.Altitude = (int)(255.0D / 2.0D * Map.HeightMultiplier); if ( ScreenXY_Get_ViewPlanePos(MouseOver.ScreenPos, MouseOverTerrain.Pos.Altitude, XY_dbl) ) { MouseOverTerrain.Pos.Horizontal.X = (int)XY_dbl.X; MouseOverTerrain.Pos.Horizontal.Y = Convert.ToInt32(- XY_dbl.Y); if ( Map.PosIsOnMap(MouseOverTerrain.Pos.Horizontal) ) { MouseOverTerrain.Pos.Altitude = (int)(Map.GetTerrainHeight(MouseOverTerrain.Pos.Horizontal)); Flag = true; } } } if ( Flag ) { MouseOver.OverTerrain = MouseOverTerrain; MouseOverTerrain.Tile.Normal.X = Conversion.Int(MouseOverTerrain.Pos.Horizontal.X / App.TerrainGridSpacing); MouseOverTerrain.Tile.Normal.Y = (int)(Conversion.Int(MouseOverTerrain.Pos.Horizontal.Y / App.TerrainGridSpacing)); MouseOverTerrain.Vertex.Normal.X = (int)(Math.Round((double)(MouseOverTerrain.Pos.Horizontal.X / App.TerrainGridSpacing))); MouseOverTerrain.Vertex.Normal.Y = (int)(Math.Round((double)(MouseOverTerrain.Pos.Horizontal.Y / App.TerrainGridSpacing))); MouseOverTerrain.Tile.Alignment = MouseOverTerrain.Vertex.Normal; MouseOverTerrain.Vertex.Alignment = new sXY_int(MouseOverTerrain.Tile.Normal.X + 1, MouseOverTerrain.Tile.Normal.Y + 1); MouseOverTerrain.Triangle = Map.GetTerrainTri(MouseOverTerrain.Pos.Horizontal); XY_dbl.X = MouseOverTerrain.Pos.Horizontal.X - MouseOverTerrain.Vertex.Normal.X * App.TerrainGridSpacing; XY_dbl.Y = MouseOverTerrain.Pos.Horizontal.Y - MouseOverTerrain.Vertex.Normal.Y * App.TerrainGridSpacing; if ( Math.Abs(XY_dbl.Y) <= Math.Abs(XY_dbl.X) ) { MouseOverTerrain.Side_IsV = false; MouseOverTerrain.Side_Num.X = MouseOverTerrain.Tile.Normal.X; MouseOverTerrain.Side_Num.Y = MouseOverTerrain.Vertex.Normal.Y; } else { MouseOverTerrain.Side_IsV = true; MouseOverTerrain.Side_Num.X = MouseOverTerrain.Vertex.Normal.X; MouseOverTerrain.Side_Num.Y = MouseOverTerrain.Tile.Normal.Y; } sXY_int SectorNum = Map.GetPosSectorNum(MouseOverTerrain.Pos.Horizontal); clsMap.clsUnit Unit = default(clsMap.clsUnit); clsMap.clsUnitSectorConnection Connection = default(clsMap.clsUnitSectorConnection); foreach ( clsMap.clsUnitSectorConnection tempLoopVar_Connection in Map.Sectors[SectorNum.X, SectorNum.Y].Units ) { Connection = tempLoopVar_Connection; Unit = Connection.Unit; XY_dbl.X = Unit.Pos.Horizontal.X - MouseOverTerrain.Pos.Horizontal.X; XY_dbl.Y = Unit.Pos.Horizontal.Y - MouseOverTerrain.Pos.Horizontal.Y; Footprint = Unit.Type.get_GetFootprintSelected(Unit.Rotation); if ( Math.Abs(XY_dbl.X) <= Math.Max(Footprint.X / 2.0D, 0.5D) * App.TerrainGridSpacing && Math.Abs(XY_dbl.Y) <= Math.Max(Footprint.Y / 2.0D, 0.5D) * App.TerrainGridSpacing ) { MouseOverTerrain.Units.Add(Unit); } } if ( MouseLeftDown != null ) { if ( modTools.Tool == modTools.Tools.TerrainBrush ) { Apply_Terrain(); if ( Program.frmMainInstance.cbxAutoTexSetHeight.Checked ) { Apply_Height_Set(App.TerrainBrush, Program.frmMainInstance.HeightSetPalette[Program.frmMainInstance.tabHeightSetL.SelectedIndex]); } } else if ( modTools.Tool == modTools.Tools.HeightSetBrush ) { Apply_Height_Set(App.HeightBrush, Program.frmMainInstance.HeightSetPalette[Program.frmMainInstance.tabHeightSetL.SelectedIndex]); } else if ( modTools.Tool == modTools.Tools.TextureBrush ) { Apply_Texture(); } else if ( modTools.Tool == modTools.Tools.CliffTriangle ) { Apply_CliffTriangle(false); } else if ( modTools.Tool == modTools.Tools.CliffBrush ) { Apply_Cliff(); } else if ( modTools.Tool == modTools.Tools.CliffRemove ) { Apply_Cliff_Remove(); } else if ( modTools.Tool == modTools.Tools.RoadPlace ) { Apply_Road(); } else if ( modTools.Tool == modTools.Tools.RoadRemove ) { Apply_Road_Remove(); } } if ( MouseRightDown != null ) { if ( modTools.Tool == modTools.Tools.HeightSetBrush ) { if ( MouseLeftDown == null ) { Apply_Height_Set(App.HeightBrush, Program.frmMainInstance.HeightSetPalette[Program.frmMainInstance.tabHeightSetR.SelectedIndex]); } } else if ( modTools.Tool == modTools.Tools.CliffTriangle ) { Apply_CliffTriangle(true); } } } } MapViewControl.Pos_Display_Update(); MapViewControl.DrawViewLater(); }