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); }
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); }
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 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++; }
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); }
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); }
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); }
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); } }
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); } }
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); } }
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); } }
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; }
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() { 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); }
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); }
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); }
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); }
public clsMapTileChanges(clsMap Map, sXY_int PointSize) : base(PointSize) { this.Map = Map; Terrain = Map.Terrain; }
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); } }
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() { 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; }
public clsMapTileChanges(Map map, XYInt pointsize) : base(pointsize) { Map = map; Terrain = map.Terrain; }