예제 #1
0
        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();
        }
예제 #2
0
 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();
 }
예제 #3
0
        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();
        }