public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            Painter = Map.Painter;
            RoadCount = new int[Painter.RoadCount];
        }
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff       = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff     = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff    = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff  = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = false;

            if (SetTexture)
            {
                Terrain.Tiles[PosNum.X, PosNum.Y].Texture.TextureNum = TextureNum;
            }
            if (SetOrientation)
            {
                if (RandomOrientation)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Texture.Orientation = new TileOrientation(App.Random.Next() < 0.5F, App.Random.Next() < 0.5F,
                                                                                                App.Random.Next() < 0.5F);
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Texture.Orientation = Orientation;
                }
            }

            Map.TileTextureChangeTerrainAction(PosNum, TerrainAction);

            Map.SectorGraphicsChanges.TileChanged(PosNum);
            Map.SectorTerrainUndoChanges.TileChanged(PosNum);
        }
Example #3
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = false;

            if ( SetTexture )
            {
                Terrain.Tiles[PosNum.X, PosNum.Y].Texture.TextureNum = TextureNum;
            }
            if ( SetOrientation )
            {
                if ( RandomOrientation )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Texture.Orientation = new TileOrientation(App.Random.Next() < 0.5F, App.Random.Next() < 0.5F,
                        App.Random.Next() < 0.5F);
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Texture.Orientation = Orientation;
                }
            }

            Map.TileTextureChangeTerrainAction(PosNum, TerrainAction);

            Map.SectorGraphicsChanges.TileChanged(PosNum);
            Map.SectorTerrainUndoChanges.TileChanged(PosNum);
        }
Example #4
0
        public void Finish()
        {
            if (!Started)
            {
                Debugger.Break();
                return;
            }

            var X = 0;
            var Y = 0;

            Terrain = Map.Terrain;

            for (Y = 0; Y <= AreaTileSize.Y; Y++)
            {
                VertexNum.Y = Offset.Y + Y;
                for (X = 0; X <= AreaTileSize.X; X++)
                {
                    VertexNum.X = Offset.X + X;
                    Terrain.Vertices[VertexNum.X, VertexNum.Y].Height = NewHeight[X, Y];

                    Map.SectorGraphicsChanges.VertexAndNormalsChanged(VertexNum);
                    Map.SectorUnitHeightsChanges.VertexChanged(VertexNum);
                    Map.SectorTerrainUndoChanges.VertexChanged(VertexNum);
                }
            }

            Started = false;
        }
Example #5
0
 public void Terrain_Add(clsTerrain NewTerrain)
 {
     NewTerrain.Num = this.TerrainCount;
     this.Terrains = (clsTerrain[]) Utils.CopyArray((Array) this.Terrains, new clsTerrain[this.TerrainCount + 1]);
     this.Terrains[this.TerrainCount] = NewTerrain;
     this.TerrainCount++;
 }
Example #6
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            Painter   = Map.Painter;
            RoadCount = new int[Painter.RoadCount];
        }
        public void Finish()
        {
            if ( !Started )
            {
                Debugger.Break();
                return;
            }

            var X = 0;
            var Y = 0;

            Terrain = Map.Terrain;

            for ( Y = 0; Y <= AreaTileSize.Y; Y++ )
            {
                VertexNum.Y = Offset.Y + Y;
                for ( X = 0; X <= AreaTileSize.X; X++ )
                {
                    VertexNum.X = Offset.X + X;
                    Terrain.Vertices[VertexNum.X, VertexNum.Y].Height = NewHeight[X, Y];

                    Map.SectorGraphicsChanges.VertexAndNormalsChanged(VertexNum);
                    Map.SectorUnitHeightsChanges.VertexChanged(VertexNum);
                    Map.SectorTerrainUndoChanges.VertexChanged(VertexNum);
                }
            }

            Started = false;
        }
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            CliffChanged = false;
            if ( Terrain.Tiles[PosNum.X, PosNum.Y].Tri )
            {
                if ( Triangle )
                {
                    if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff )
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = false;
                        CliffChanged = true;
                    }
                }
                else
                {
                    if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff )
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = false;
                        CliffChanged = true;
                    }
                }
                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff ||
                                                                    Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff;
            }
            else
            {
                if ( Triangle )
                {
                    if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff )
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = false;
                        CliffChanged = true;
                    }
                }
                else
                {
                    if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff )
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = false;
                        CliffChanged = true;
                    }
                }
                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff ||
                                                                    Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff;
            }

            if ( !CliffChanged )
            {
                return;
            }

            Map.AutoTextureChanges.TileChanged(PosNum);
            Map.SectorGraphicsChanges.TileChanged(PosNum);
            Map.SectorTerrainUndoChanges.TileChanged(PosNum);
        }
Example #9
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            CliffChanged = false;
            if (Terrain.Tiles[PosNum.X, PosNum.Y].Tri)
            {
                if (Triangle)
                {
                    if (Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff)
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = false;
                        CliffChanged = true;
                    }
                }
                else
                {
                    if (Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff)
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = false;
                        CliffChanged = true;
                    }
                }
                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff ||
                                                                    Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff;
            }
            else
            {
                if (Triangle)
                {
                    if (Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff)
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = false;
                        CliffChanged = true;
                    }
                }
                else
                {
                    if (Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff)
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = false;
                        CliffChanged = true;
                    }
                }
                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff ||
                                                                    Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff;
            }

            if (!CliffChanged)
            {
                return;
            }

            Map.AutoTextureChanges.TileChanged(PosNum);
            Map.SectorGraphicsChanges.TileChanged(PosNum);
            Map.SectorTerrainUndoChanges.TileChanged(PosNum);
        }
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            Terrain.Vertices[PosNum.X, PosNum.Y].Height =
                (byte)(MathUtil.Clamp_int((Terrain.Vertices[PosNum.X, PosNum.Y].Height) + (int)(Rate * Effect), Byte.MinValue, Byte.MaxValue));

            Map.SectorGraphicsChanges.VertexAndNormalsChanged(PosNum);
            Map.SectorUnitHeightsChanges.VertexChanged(PosNum);
            Map.SectorTerrainUndoChanges.VertexChanged(PosNum);
        }
Example #11
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            Terrain.Vertices[PosNum.X, PosNum.Y].Height =
                (byte)(MathUtil.ClampInt((Terrain.Vertices[PosNum.X, PosNum.Y].Height) + (Rate * Effect).ToInt(), Byte.MinValue, Byte.MaxValue));

            Map.SectorGraphicsChanges.VertexAndNormalsChanged(PosNum);
            Map.SectorUnitHeightsChanges.VertexChanged(PosNum);
            Map.SectorTerrainUndoChanges.VertexChanged(PosNum);
        }
Example #12
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            if ( Terrain.Vertices[PosNum.X, PosNum.Y].Height != Height )
            {
                Terrain.Vertices[PosNum.X, PosNum.Y].Height = Height;
                Map.SectorGraphicsChanges.VertexAndNormalsChanged(PosNum);
                Map.SectorUnitHeightsChanges.VertexChanged(PosNum);
                Map.SectorTerrainUndoChanges.VertexChanged(PosNum);
            }
        }
Example #13
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            if (Terrain.Vertices[PosNum.X, PosNum.Y].Terrain != VertexTerrain)
            {
                Terrain.Vertices[PosNum.X, PosNum.Y].Terrain = VertexTerrain;
                Map.SectorGraphicsChanges.VertexChanged(PosNum);
                Map.SectorTerrainUndoChanges.VertexChanged(PosNum);
                Map.AutoTextureChanges.VertexChanged(PosNum);
            }
        }
        private void ToolPerformSideV(XYInt SideNum)
        {
            Terrain = Map.Terrain;

            if (Terrain.SideV[SideNum.X, SideNum.Y].Road != null)
            {
                Terrain.SideV[SideNum.X, SideNum.Y].Road = null;
                Map.AutoTextureChanges.SideVChanged(SideNum);
                Map.SectorGraphicsChanges.SideVChanged(SideNum);
                Map.SectorTerrainUndoChanges.SideVChanged(SideNum);
            }
        }
Example #15
0
        private void ToolPerformSideV(XYInt SideNum)
        {
            Terrain = Map.Terrain;

            if ( Terrain.SideV[SideNum.X, SideNum.Y].Road != null )
            {
                Terrain.SideV[SideNum.X, SideNum.Y].Road = null;
                Map.AutoTextureChanges.SideVChanged(SideNum);
                Map.SectorGraphicsChanges.SideVChanged(SideNum);
                Map.SectorTerrainUndoChanges.SideVChanged(SideNum);
            }
        }
Example #16
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            if (Terrain.Vertices[PosNum.X, PosNum.Y].Height != Height)
            {
                Terrain.Vertices[PosNum.X, PosNum.Y].Height = Height;
                Map.SectorGraphicsChanges.VertexAndNormalsChanged(PosNum);
                Map.SectorUnitHeightsChanges.VertexChanged(PosNum);
                Map.SectorTerrainUndoChanges.VertexChanged(PosNum);
            }
        }
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            if ( Terrain.Vertices[PosNum.X, PosNum.Y].Terrain != VertexTerrain )
            {
                Terrain.Vertices[PosNum.X, PosNum.Y].Terrain = VertexTerrain;
                Map.SectorGraphicsChanges.VertexChanged(PosNum);
                Map.SectorTerrainUndoChanges.VertexChanged(PosNum);
                Map.AutoTextureChanges.VertexChanged(PosNum);
            }
        }
Example #18
0
        public void Start()
        {
            var X = 0;
            var Y = 0;

            Terrain = Map.Terrain;

            NewHeight = new byte[AreaTileSize.X + 1, AreaTileSize.Y + 1];
            for (Y = 0; Y <= AreaTileSize.Y; Y++)
            {
                for (X = 0; X <= AreaTileSize.X; X++)
                {
                    NewHeight[X, Y] = Terrain.Vertices[Offset.X + X, Offset.Y + Y].Height;
                }
            }

            Started = true;
        }
Example #19
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            if (Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff || Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff ||
                Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff || Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff ||
                Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff)
            {
                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff       = false;
                Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff  = false;
                Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = false;
                Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff     = false;
                Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff    = false;

                Map.AutoTextureChanges.TileChanged(PosNum);
                Map.SectorGraphicsChanges.TileChanged(PosNum);
                Map.SectorTerrainUndoChanges.TileChanged(PosNum);
            }
        }
Example #20
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            if ( Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff || Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff ||
                 Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff || Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff ||
                 Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff )
            {
                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = false;
                Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = false;
                Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = false;
                Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = false;
                Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = false;

                Map.AutoTextureChanges.TileChanged(PosNum);
                Map.SectorGraphicsChanges.TileChanged(PosNum);
                Map.SectorTerrainUndoChanges.TileChanged(PosNum);
            }
        }
        public override void ActionPerform()
        {
            if ( !Started )
            {
                Debugger.Break();
                return;
            }

            var X = 0;
            var Y = 0;
            var X2 = 0;
            var Y2 = 0;

            Terrain = Map.Terrain;

            LimitX = Terrain.TileSize.X;
            LimitY = Terrain.TileSize.Y;
            TempHeight = 0;
            Samples = 0;
            for ( Y = MathUtil.Clamp_int(App.SmoothRadius.Tiles.YMin + PosNum.Y, 0, LimitY) - PosNum.Y;
                Y <= MathUtil.Clamp_int(App.SmoothRadius.Tiles.YMax + PosNum.Y, 0, LimitY) - PosNum.Y;
                Y++ )
            {
                Y2 = PosNum.Y + Y;
                XNum = Y - App.SmoothRadius.Tiles.YMin;
                for ( X = MathUtil.Clamp_int(Convert.ToInt32(App.SmoothRadius.Tiles.XMin[XNum] + PosNum.X), 0, LimitX) - PosNum.X;
                    X <= MathUtil.Clamp_int(Convert.ToInt32(App.SmoothRadius.Tiles.XMax[XNum] + PosNum.X), 0, LimitX) - PosNum.X;
                    X++ )
                {
                    X2 = PosNum.X + X;
                    TempHeight += Terrain.Vertices[X2, Y2].Height;
                    Samples++;
                }
            }
            NewHeight[PosNum.X - Offset.X, PosNum.Y - Offset.Y] =
                Math.Min((byte)(Convert.ToInt32(Terrain.Vertices[PosNum.X, PosNum.Y].Height * (1.0D - Ratio) + TempHeight / (double)Samples * Ratio)), Byte.MaxValue);
        }
Example #22
0
        public override void ActionPerform()
        {
            if (!Started)
            {
                Debugger.Break();
                return;
            }

            var X  = 0;
            var Y  = 0;
            var X2 = 0;
            var Y2 = 0;

            Terrain = Map.Terrain;

            LimitX     = Terrain.TileSize.X;
            LimitY     = Terrain.TileSize.Y;
            TempHeight = 0;
            Samples    = 0;
            for (Y = MathUtil.ClampInt(App.SmoothRadius.Tiles.YMin + PosNum.Y, 0, LimitY) - PosNum.Y;
                 Y <= MathUtil.ClampInt(App.SmoothRadius.Tiles.YMax + PosNum.Y, 0, LimitY) - PosNum.Y;
                 Y++)
            {
                Y2   = PosNum.Y + Y;
                XNum = Y - App.SmoothRadius.Tiles.YMin;
                for (X = MathUtil.ClampInt(Convert.ToInt32(App.SmoothRadius.Tiles.XMin[XNum] + PosNum.X), 0, LimitX) - PosNum.X;
                     X <= MathUtil.ClampInt(Convert.ToInt32(App.SmoothRadius.Tiles.XMax[XNum] + PosNum.X), 0, LimitX) - PosNum.X;
                     X++)
                {
                    X2          = PosNum.X + X;
                    TempHeight += Terrain.Vertices[X2, Y2].Height;
                    Samples++;
                }
            }
            NewHeight[PosNum.X - Offset.X, PosNum.Y - Offset.Y] =
                Math.Min((byte)(Convert.ToInt32(Terrain.Vertices[PosNum.X, PosNum.Y].Height * (1.0D - Ratio) + TempHeight / (double)Samples * Ratio)), Byte.MaxValue);
        }
Example #23
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            HeightA = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y].Height) / 2.0D);
            HeightB = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y + 1].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y + 1].Height) / 2.0D);
            DifA = HeightB - HeightA;
            HeightA = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y].Height) + Terrain.Vertices[PosNum.X, PosNum.Y + 1].Height) / 2.0D);
            HeightB = Convert.ToDouble(((Terrain.Vertices[PosNum.X + 1, PosNum.Y].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y + 1].Height) / 2.0D);
            DifB = HeightB - HeightA;
            if ( Math.Abs(DifA) == Math.Abs(DifB) )
            {
                RandomNum = (int)((App.Random.Next() * 4.0F));
                if ( RandomNum == 0 )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Top;
                }
                else if ( RandomNum == 1 )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Right;
                }
                else if ( RandomNum == 2 )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Bottom;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Left;
                }
            }
            else if ( Math.Abs(DifA) > Math.Abs(DifB) )
            {
                if ( DifA < 0.0D )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Bottom;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Top;
                }
            }
            else
            {
                if ( DifB < 0.0D )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Right;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Left;
                }
            }

            CliffChanged = false;
            TriChanged = false;

            if ( SetTris )
            {
                DifA = Math.Abs((Terrain.Vertices[PosNum.X + 1, PosNum.Y + 1].Height) - Terrain.Vertices[PosNum.X, PosNum.Y].Height);
                DifB = Math.Abs((Terrain.Vertices[PosNum.X, PosNum.Y + 1].Height) - Terrain.Vertices[PosNum.X + 1, PosNum.Y].Height);
                if ( DifA == DifB )
                {
                    if ( App.Random.Next() >= 0.5F )
                    {
                        NewVal = false;
                    }
                    else
                    {
                        NewVal = true;
                    }
                }
                else if ( DifA < DifB )
                {
                    NewVal = false;
                }
                else
                {
                    NewVal = true;
                }
                if ( Terrain.Tiles[PosNum.X, PosNum.Y].Tri != NewVal )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Tri = NewVal;
                    TriChanged = true;
                }
            }

            if ( Terrain.Tiles[PosNum.X, PosNum.Y].Tri )
            {
                Pos.X = (int)((PosNum.X + 0.25D) * Constants.TerrainGridSpacing);
                Pos.Y = (int)((PosNum.Y + 0.25D) * Constants.TerrainGridSpacing);
                TriTopLeftMaxSlope = Map.GetTerrainSlopeAngle(Pos);
                Pos.X = (int)((PosNum.X + 0.75D) * Constants.TerrainGridSpacing);
                Pos.Y = (int)((PosNum.Y + 0.75D) * Constants.TerrainGridSpacing);
                TriBottomRightMaxSlope = Map.GetTerrainSlopeAngle(Pos);

                if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = false;
                    CliffChanged = true;
                }
                if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = false;
                    CliffChanged = true;
                }

                NewVal = TriTopLeftMaxSlope >= Angle;
                if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff != NewVal )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = NewVal;
                    CliffChanged = true;
                }

                NewVal = TriBottomRightMaxSlope >= Angle;
                if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff != NewVal )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = NewVal;
                    CliffChanged = true;
                }

                if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff || Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = false;
                }
            }
            else
            {
                Pos.X = (int)((PosNum.X + 0.75D) * Constants.TerrainGridSpacing);
                Pos.Y = (int)((PosNum.Y + 0.25D) * Constants.TerrainGridSpacing);
                TriTopRightMaxSlope = Map.GetTerrainSlopeAngle(Pos);
                Pos.X = (int)((PosNum.X + 0.25D) * Constants.TerrainGridSpacing);
                Pos.Y = (int)((PosNum.Y + 0.75D) * Constants.TerrainGridSpacing);
                TriBottomLeftMaxSlope = Map.GetTerrainSlopeAngle(Pos);

                if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = false;
                    CliffChanged = true;
                }
                if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = false;
                    CliffChanged = true;
                }

                NewVal = TriTopRightMaxSlope >= Angle;
                if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff != NewVal )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = NewVal;
                    CliffChanged = true;
                }

                NewVal = TriBottomLeftMaxSlope >= Angle;
                if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff != NewVal )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = NewVal;
                    CliffChanged = true;
                }

                if ( Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff || Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = false;
                }
            }

            if ( CliffChanged )
            {
                Map.AutoTextureChanges.TileChanged(PosNum);
            }
            if ( TriChanged || CliffChanged )
            {
                Map.SectorGraphicsChanges.TileChanged(PosNum);
                Map.SectorTerrainUndoChanges.TileChanged(PosNum);
            }
        }
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;

            CliffChanged = false;
            if ( Terrain.Tiles[PosNum.X, PosNum.Y].Tri )
            {
                if ( Triangle )
                {
                    if ( !Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff )
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = true;
                        CliffChanged = true;
                    }
                }
                else
                {
                    if ( !Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff )
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = true;
                        CliffChanged = true;
                    }
                }
            }
            else
            {
                if ( Triangle )
                {
                    if ( !Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff )
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = true;
                        CliffChanged = true;
                    }
                }
                else
                {
                    if ( !Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff )
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = true;
                        CliffChanged = true;
                    }
                }
            }

            if ( !CliffChanged )
            {
                return;
            }

            double HeightA = 0;
            double HeightB = 0;
            double difA = 0;
            double difB = 0;
            int A;

            Map.AutoTextureChanges.TileChanged(PosNum);
            Map.SectorGraphicsChanges.TileChanged(PosNum);
            Map.SectorTerrainUndoChanges.TileChanged(PosNum);

            HeightA = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y].Height) / 2.0D);
            HeightB = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y + 1].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y + 1].Height) / 2.0D);
            difA = HeightB - HeightA;
            HeightA = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y].Height) + Terrain.Vertices[PosNum.X, PosNum.Y + 1].Height) / 2.0D);
            HeightB = Convert.ToDouble(((Terrain.Vertices[PosNum.X + 1, PosNum.Y].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y + 1].Height) / 2.0D);
            difB = HeightB - HeightA;
            if ( Math.Abs(difA) == Math.Abs(difB) )
            {
                A = (int)((App.Random.Next() * 4.0F));
                if ( A == 0 )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Top;
                }
                else if ( A == 1 )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Right;
                }
                else if ( A == 2 )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Bottom;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Left;
                }
            }
            else if ( Math.Abs(difA) > Math.Abs(difB) )
            {
                if ( difA < 0.0D )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Bottom;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Top;
                }
            }
            else
            {
                if ( difB < 0.0D )
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Right;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Left;
                }
            }
        }
        public override void ActionPerform()
        {
            var A = 0;

            Terrain = Map.Terrain;

            Painter = Map.Painter;
            TerrainCount = new int[Painter.TerrainCount];

            if ( PosNum.Y > 0 )
            {
                if ( PosNum.X > 0 )
                {
                    VertexDirection = TileUtil.BottomRight;
                    Tile = Terrain.Tiles[PosNum.X - 1, PosNum.Y - 1];
                    Texture = Tile.Texture;
                    ToolPerformTile();
                }
                if ( PosNum.X < Terrain.TileSize.X )
                {
                    VertexDirection = TileUtil.BottomLeft;
                    Tile = Terrain.Tiles[PosNum.X, PosNum.Y - 1];
                    Texture = Tile.Texture;
                    ToolPerformTile();
                }
            }
            if ( PosNum.Y < Terrain.TileSize.Y )
            {
                if ( PosNum.X > 0 )
                {
                    VertexDirection = TileUtil.TopRight;
                    Tile = Terrain.Tiles[PosNum.X - 1, PosNum.Y];
                    Texture = Tile.Texture;
                    ToolPerformTile();
                }
                if ( PosNum.X < Terrain.TileSize.X )
                {
                    VertexDirection = TileUtil.TopLeft;
                    Tile = Terrain.Tiles[PosNum.X, PosNum.Y];
                    Texture = Tile.Texture;
                    ToolPerformTile();
                }
            }

            BestNum = -1;
            BestCount = 0;
            for ( A = 0; A <= Painter.TerrainCount - 1; A++ )
            {
                if ( TerrainCount[A] > BestCount )
                {
                    BestNum = A;
                    BestCount = TerrainCount[A];
                }
            }
            if ( BestCount > 0 )
            {
                Terrain.Vertices[PosNum.X, PosNum.Y].Terrain = Painter.Terrains[BestNum];
            }
            else
            {
                Terrain.Vertices[PosNum.X, PosNum.Y].Terrain = null;
            }

            Map.SectorTerrainUndoChanges.VertexChanged(PosNum);
        }
        public override void ActionPerform()
        {
            var PainterBrushNum = 0;
            var A = 0;

            Terrain = Map.Terrain;

            Painter = Map.Painter;

            Tile = Terrain.Tiles[PosNum.X, PosNum.Y];
            Texture = Tile.Texture;

            Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = false;
            Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.None;

            for ( PainterBrushNum = 0; PainterBrushNum <= Painter.CliffBrushCount - 1; PainterBrushNum++ )
            {
                for ( A = 0; A <= Painter.CliffBrushes[PainterBrushNum].Tiles_Straight.TileCount - 1; A++ )
                {
                    PainterTexture = Painter.CliffBrushes[PainterBrushNum].Tiles_Straight.Tiles[A];
                    if ( PainterTexture.TextureNum == Texture.TextureNum )
                    {
                        if ( Tile.Tri )
                        {
                            Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = true;
                            Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = true;
                        }
                        else
                        {
                            Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = true;
                            Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = true;
                        }
                        Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                        TileUtil.RotateDirection(PainterTexture.Direction, Texture.Orientation, ref ResultDirection);
                        Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = ResultDirection;
                    }
                }
                for ( A = 0; A <= Painter.CliffBrushes[PainterBrushNum].Tiles_Corner_In.TileCount - 1; A++ )
                {
                    PainterTexture = Painter.CliffBrushes[PainterBrushNum].Tiles_Corner_In.Tiles[A];
                    if ( PainterTexture.TextureNum == Texture.TextureNum )
                    {
                        TileUtil.RotateDirection(PainterTexture.Direction, Texture.Orientation, ref ResultDirection);
                        if ( Tile.Tri )
                        {
                            if ( TileUtil.IdenticalTileDirections(ResultDirection, TileUtil.TopLeft) )
                            {
                                Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = true;
                                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                            }
                            else if ( TileUtil.IdenticalTileDirections(ResultDirection, TileUtil.BottomRight) )
                            {
                                Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = true;
                                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                            }
                        }
                        else
                        {
                            if ( TileUtil.IdenticalTileDirections(ResultDirection, TileUtil.TopRight) )
                            {
                                Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = true;
                                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                            }
                            else if ( TileUtil.IdenticalTileDirections(ResultDirection, TileUtil.BottomLeft) )
                            {
                                Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = true;
                                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                            }
                        }
                    }
                }
                for ( A = 0; A <= Painter.CliffBrushes[PainterBrushNum].Tiles_Corner_Out.TileCount - 1; A++ )
                {
                    PainterTexture = Painter.CliffBrushes[PainterBrushNum].Tiles_Corner_Out.Tiles[A];
                    if ( PainterTexture.TextureNum == Texture.TextureNum )
                    {
                        OppositeDirection = PainterTexture.Direction;
                        OppositeDirection.FlipX();
                        OppositeDirection.FlipY();
                        TileUtil.RotateDirection(OppositeDirection, Texture.Orientation, ref ResultDirection);
                        if ( Tile.Tri )
                        {
                            if ( TileUtil.IdenticalTileDirections(ResultDirection, TileUtil.TopLeft) )
                            {
                                Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = true;
                                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                            }
                            else if ( TileUtil.IdenticalTileDirections(ResultDirection, TileUtil.BottomRight) )
                            {
                                Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = true;
                                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                            }
                        }
                        else
                        {
                            if ( TileUtil.IdenticalTileDirections(ResultDirection, TileUtil.TopRight) )
                            {
                                Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = true;
                                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                            }
                            else if ( TileUtil.IdenticalTileDirections(ResultDirection, TileUtil.BottomLeft) )
                            {
                                Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = true;
                                Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                            }
                        }
                    }
                }
            }

            Map.SectorTerrainUndoChanges.TileChanged(PosNum);
        }
Example #27
0
        public override void ActionPerform()
        {
            var painterBrushNum = 0;

            terrain = Map.Terrain;

            painter = Map.Painter;

            tile    = terrain.Tiles[PosNum.X, PosNum.Y];
            texture = tile.Texture;

            terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff     = false;
            terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff    = false;
            terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff  = false;
            terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = false;
            terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.None;

            for (painterBrushNum = 0; painterBrushNum <= painter.CliffBrushCount - 1; painterBrushNum++)
            {
                var a = 0;
                for (a = 0; a <= painter.CliffBrushes[painterBrushNum].Tiles_Straight.TileCount - 1; a++)
                {
                    painterTexture = painter.CliffBrushes[painterBrushNum].Tiles_Straight.Tiles[a];
                    if (painterTexture.TextureNum == texture.TextureNum)
                    {
                        if (tile.Tri)
                        {
                            terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff     = true;
                            terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = true;
                        }
                        else
                        {
                            terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff   = true;
                            terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = true;
                        }
                        terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                        TileUtil.RotateDirection(painterTexture.Direction, texture.Orientation, ref resultDirection);
                        terrain.Tiles[PosNum.X, PosNum.Y].DownSide = resultDirection;
                    }
                }
                for (a = 0; a <= painter.CliffBrushes[painterBrushNum].Tiles_Corner_In.TileCount - 1; a++)
                {
                    painterTexture = painter.CliffBrushes[painterBrushNum].Tiles_Corner_In.Tiles[a];
                    if (painterTexture.TextureNum == texture.TextureNum)
                    {
                        TileUtil.RotateDirection(painterTexture.Direction, texture.Orientation, ref resultDirection);
                        if (tile.Tri)
                        {
                            if (TileUtil.IdenticalTileDirections(resultDirection, TileUtil.TopLeft))
                            {
                                terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = true;
                                terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff   = true;
                            }
                            else if (TileUtil.IdenticalTileDirections(resultDirection, TileUtil.BottomRight))
                            {
                                terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = true;
                                terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff       = true;
                            }
                        }
                        else
                        {
                            if (TileUtil.IdenticalTileDirections(resultDirection, TileUtil.TopRight))
                            {
                                terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = true;
                                terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff    = true;
                            }
                            else if (TileUtil.IdenticalTileDirections(resultDirection, TileUtil.BottomLeft))
                            {
                                terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = true;
                                terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff      = true;
                            }
                        }
                    }
                }
                for (a = 0; a <= painter.CliffBrushes[painterBrushNum].Tiles_Corner_Out.TileCount - 1; a++)
                {
                    painterTexture = painter.CliffBrushes[painterBrushNum].Tiles_Corner_Out.Tiles[a];
                    if (painterTexture.TextureNum == texture.TextureNum)
                    {
                        oppositeDirection = painterTexture.Direction;
                        oppositeDirection.FlipX();
                        oppositeDirection.FlipY();
                        TileUtil.RotateDirection(oppositeDirection, texture.Orientation, ref resultDirection);
                        if (tile.Tri)
                        {
                            if (TileUtil.IdenticalTileDirections(resultDirection, TileUtil.TopLeft))
                            {
                                terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = true;
                                terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff   = true;
                            }
                            else if (TileUtil.IdenticalTileDirections(resultDirection, TileUtil.BottomRight))
                            {
                                terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = true;
                                terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff       = true;
                            }
                        }
                        else
                        {
                            if (TileUtil.IdenticalTileDirections(resultDirection, TileUtil.TopRight))
                            {
                                terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = true;
                                terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff    = true;
                            }
                            else if (TileUtil.IdenticalTileDirections(resultDirection, TileUtil.BottomLeft))
                            {
                                terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = true;
                                terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff      = true;
                            }
                        }
                    }
                }
            }

            Map.SectorTerrainUndoChanges.TileChanged(PosNum);
        }
Example #28
0
 public clsMapTileChanges(clsMap Map, sXY_int PointSize)
     : base(PointSize)
 {
     this.Map = Map;
     Terrain = Map.Terrain;
 }
Example #29
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            HeightA = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y].Height) / 2.0D);
            HeightB = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y + 1].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y + 1].Height) / 2.0D);
            DifA    = HeightB - HeightA;
            HeightA = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y].Height) + Terrain.Vertices[PosNum.X, PosNum.Y + 1].Height) / 2.0D);
            HeightB = Convert.ToDouble(((Terrain.Vertices[PosNum.X + 1, PosNum.Y].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y + 1].Height) / 2.0D);
            DifB    = HeightB - HeightA;
            if (Math.Abs(DifA) == Math.Abs(DifB))
            {
                RandomNum = (App.Random.Next() * 4.0F).ToInt();
                if (RandomNum == 0)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Top;
                }
                else if (RandomNum == 1)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Right;
                }
                else if (RandomNum == 2)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Bottom;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Left;
                }
            }
            else if (Math.Abs(DifA) > Math.Abs(DifB))
            {
                if (DifA < 0.0D)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Bottom;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Top;
                }
            }
            else
            {
                if (DifB < 0.0D)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Right;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Left;
                }
            }

            CliffChanged = false;
            TriChanged   = false;

            if (SetTris)
            {
                DifA = Math.Abs((Terrain.Vertices[PosNum.X + 1, PosNum.Y + 1].Height) - Terrain.Vertices[PosNum.X, PosNum.Y].Height);
                DifB = Math.Abs((Terrain.Vertices[PosNum.X, PosNum.Y + 1].Height) - Terrain.Vertices[PosNum.X + 1, PosNum.Y].Height);
                if (DifA == DifB)
                {
                    if (App.Random.Next() >= 0.5F)
                    {
                        NewVal = false;
                    }
                    else
                    {
                        NewVal = true;
                    }
                }
                else if (DifA < DifB)
                {
                    NewVal = false;
                }
                else
                {
                    NewVal = true;
                }
                if (Terrain.Tiles[PosNum.X, PosNum.Y].Tri != NewVal)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Tri = NewVal;
                    TriChanged = true;
                }
            }

            if (Terrain.Tiles[PosNum.X, PosNum.Y].Tri)
            {
                Pos.X = ((PosNum.X + 0.25D) * Constants.TerrainGridSpacing).ToInt();
                Pos.Y = ((PosNum.Y + 0.25D) * Constants.TerrainGridSpacing).ToInt();
                TriTopLeftMaxSlope = Map.GetTerrainSlopeAngle(Pos);
                Pos.X = ((PosNum.X + 0.75D) * Constants.TerrainGridSpacing).ToInt();
                Pos.Y = ((PosNum.Y + 0.75D) * Constants.TerrainGridSpacing).ToInt();
                TriBottomRightMaxSlope = Map.GetTerrainSlopeAngle(Pos);

                if (Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = false;
                    CliffChanged = true;
                }
                if (Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = false;
                    CliffChanged = true;
                }

                NewVal = TriTopLeftMaxSlope >= Angle;
                if (Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff != NewVal)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = NewVal;
                    CliffChanged = true;
                }

                NewVal = TriBottomRightMaxSlope >= Angle;
                if (Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff != NewVal)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = NewVal;
                    CliffChanged = true;
                }

                if (Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff || Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = false;
                }
            }
            else
            {
                Pos.X = ((PosNum.X + 0.75D) * Constants.TerrainGridSpacing).ToInt();
                Pos.Y = ((PosNum.Y + 0.25D) * Constants.TerrainGridSpacing).ToInt();
                TriTopRightMaxSlope = Map.GetTerrainSlopeAngle(Pos);
                Pos.X = ((PosNum.X + 0.25D) * Constants.TerrainGridSpacing).ToInt();
                Pos.Y = ((PosNum.Y + 0.75D) * Constants.TerrainGridSpacing).ToInt();
                TriBottomLeftMaxSlope = Map.GetTerrainSlopeAngle(Pos);

                if (Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = false;
                    CliffChanged = true;
                }
                if (Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = false;
                    CliffChanged = true;
                }

                NewVal = TriTopRightMaxSlope >= Angle;
                if (Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff != NewVal)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = NewVal;
                    CliffChanged = true;
                }

                NewVal = TriBottomLeftMaxSlope >= Angle;
                if (Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff != NewVal)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = NewVal;
                    CliffChanged = true;
                }

                if (Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff || Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = false;
                }
            }

            if (CliffChanged)
            {
                Map.AutoTextureChanges.TileChanged(PosNum);
            }
            if (TriChanged || CliffChanged)
            {
                Map.SectorGraphicsChanges.TileChanged(PosNum);
                Map.SectorTerrainUndoChanges.TileChanged(PosNum);
            }
        }
Example #30
0
        public override void ActionPerform()
        {
            var A = 0;

            Terrain = Map.Terrain;

            Painter      = Map.Painter;
            TerrainCount = new int[Painter.TerrainCount];

            if (PosNum.Y > 0)
            {
                if (PosNum.X > 0)
                {
                    VertexDirection = TileUtil.BottomRight;
                    Tile            = Terrain.Tiles[PosNum.X - 1, PosNum.Y - 1];
                    Texture         = Tile.Texture;
                    ToolPerformTile();
                }
                if (PosNum.X < Terrain.TileSize.X)
                {
                    VertexDirection = TileUtil.BottomLeft;
                    Tile            = Terrain.Tiles[PosNum.X, PosNum.Y - 1];
                    Texture         = Tile.Texture;
                    ToolPerformTile();
                }
            }
            if (PosNum.Y < Terrain.TileSize.Y)
            {
                if (PosNum.X > 0)
                {
                    VertexDirection = TileUtil.TopRight;
                    Tile            = Terrain.Tiles[PosNum.X - 1, PosNum.Y];
                    Texture         = Tile.Texture;
                    ToolPerformTile();
                }
                if (PosNum.X < Terrain.TileSize.X)
                {
                    VertexDirection = TileUtil.TopLeft;
                    Tile            = Terrain.Tiles[PosNum.X, PosNum.Y];
                    Texture         = Tile.Texture;
                    ToolPerformTile();
                }
            }

            BestNum   = -1;
            BestCount = 0;
            for (A = 0; A <= Painter.TerrainCount - 1; A++)
            {
                if (TerrainCount[A] > BestCount)
                {
                    BestNum   = A;
                    BestCount = TerrainCount[A];
                }
            }
            if (BestCount > 0)
            {
                Terrain.Vertices[PosNum.X, PosNum.Y].Terrain = Painter.Terrains[BestNum];
            }
            else
            {
                Terrain.Vertices[PosNum.X, PosNum.Y].Terrain = null;
            }

            Map.SectorTerrainUndoChanges.VertexChanged(PosNum);
        }
Example #31
0
        public override void ActionPerform()
        {
            Terrain = Map.Terrain;

            Terrain.Tiles[PosNum.X, PosNum.Y].Terrain_IsCliff = true;

            CliffChanged = false;
            if (Terrain.Tiles[PosNum.X, PosNum.Y].Tri)
            {
                if (Triangle)
                {
                    if (!Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff)
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomRightIsCliff = true;
                        CliffChanged = true;
                    }
                }
                else
                {
                    if (!Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff)
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriTopLeftIsCliff = true;
                        CliffChanged = true;
                    }
                }
            }
            else
            {
                if (Triangle)
                {
                    if (!Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff)
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriTopRightIsCliff = true;
                        CliffChanged = true;
                    }
                }
                else
                {
                    if (!Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff)
                    {
                        Terrain.Tiles[PosNum.X, PosNum.Y].TriBottomLeftIsCliff = true;
                        CliffChanged = true;
                    }
                }
            }

            if (!CliffChanged)
            {
                return;
            }

            double HeightA = 0;
            double HeightB = 0;
            double difA    = 0;
            double difB    = 0;
            int    A;

            Map.AutoTextureChanges.TileChanged(PosNum);
            Map.SectorGraphicsChanges.TileChanged(PosNum);
            Map.SectorTerrainUndoChanges.TileChanged(PosNum);

            HeightA = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y].Height) / 2.0D);
            HeightB = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y + 1].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y + 1].Height) / 2.0D);
            difA    = HeightB - HeightA;
            HeightA = Convert.ToDouble(((Terrain.Vertices[PosNum.X, PosNum.Y].Height) + Terrain.Vertices[PosNum.X, PosNum.Y + 1].Height) / 2.0D);
            HeightB = Convert.ToDouble(((Terrain.Vertices[PosNum.X + 1, PosNum.Y].Height) + Terrain.Vertices[PosNum.X + 1, PosNum.Y + 1].Height) / 2.0D);
            difB    = HeightB - HeightA;
            if (Math.Abs(difA) == Math.Abs(difB))
            {
                A = (App.Random.Next() * 4.0F).ToInt();
                if (A == 0)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Top;
                }
                else if (A == 1)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Right;
                }
                else if (A == 2)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Bottom;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Left;
                }
            }
            else if (Math.Abs(difA) > Math.Abs(difB))
            {
                if (difA < 0.0D)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Bottom;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Top;
                }
            }
            else
            {
                if (difB < 0.0D)
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Right;
                }
                else
                {
                    Terrain.Tiles[PosNum.X, PosNum.Y].DownSide = TileUtil.Left;
                }
            }
        }
        public void Start()
        {
            var X = 0;
            var Y = 0;

            Terrain = Map.Terrain;

            NewHeight = new byte[AreaTileSize.X + 1, AreaTileSize.Y + 1];
            for ( Y = 0; Y <= AreaTileSize.Y; Y++ )
            {
                for ( X = 0; X <= AreaTileSize.X; X++ )
                {
                    NewHeight[X, Y] = Terrain.Vertices[Offset.X + X, Offset.Y + Y].Height;
                }
            }

            Started = true;
        }
Example #33
0
 public clsMapTileChanges(Map map, XYInt pointsize) : base(pointsize)
 {
     Map     = map;
     Terrain = map.Terrain;
 }