示例#1
0
        public void Expand_One_Tile(clsBooleanMap Source)
        {
            int X = 0;
            int Y = 0;

            SizeCopy(Source);
            for ( Y = 0; Y <= ValueData.Size.Y - 1; Y++ )
            {
                for ( X = 0; X <= Source.ValueData.Size.X - 1; X++ )
                {
                    if ( Source.ValueData.Value[Y, X] )
                    {
                        ValueData.Value[Y, X] = true;
                        if ( Y > 0 )
                        {
                            if ( X > 0 )
                            {
                                ValueData.Value[Y - 1, X - 1] = true;
                            }
                            ValueData.Value[Y - 1, X] = true;
                            if ( X < Source.ValueData.Size.X - 1 )
                            {
                                ValueData.Value[Y - 1, X + 1] = true;
                            }
                        }
                        if ( X > 0 )
                        {
                            ValueData.Value[Y, X - 1] = true;
                        }
                        ValueData.Value[Y, X] = true;
                        if ( X < ValueData.Size.X - 1 )
                        {
                            ValueData.Value[Y, X + 1] = true;
                        }
                        if ( Y < ValueData.Size.Y - 1 )
                        {
                            if ( X > 0 )
                            {
                                ValueData.Value[Y + 1, X - 1] = true;
                            }
                            ValueData.Value[Y + 1, X] = true;
                            if ( X < ValueData.Size.X - 1 )
                            {
                                ValueData.Value[Y + 1, X + 1] = true;
                            }
                        }
                    }
                }
            }
        }
示例#2
0
        public void Copy(clsBooleanMap Source)
        {
            int X = 0;
            int Y = 0;

            SizeCopy(Source);
            for ( Y = 0; Y <= Source.ValueData.Size.Y - 1; Y++ )
            {
                for ( X = 0; X <= Source.ValueData.Size.X - 1; X++ )
                {
                    ValueData.Value[Y, X] = Source.ValueData.Value[Y, X];
                }
            }
        }
示例#3
0
        public void Combine(clsBooleanMap Source, clsBooleanMap Insert)
        {
            int X = 0;
            int Y = 0;

            SizeCopy(Source);
            for ( Y = 0; Y <= Source.ValueData.Size.Y - 1; Y++ )
            {
                for ( X = 0; X <= Source.ValueData.Size.X - 1; X++ )
                {
                    if ( Insert.ValueData.Value[Y, X] )
                    {
                        ValueData.Value[Y, X] = true;
                    }
                    else
                    {
                        ValueData.Value[Y, X] = Source.ValueData.Value[Y, X];
                    }
                }
            }
        }
示例#4
0
        public void Within(clsBooleanMap Interior, clsBooleanMap Exterior)
        {
            int Y = 0;
            int X = 0;
            bool Flag = default(bool);

            SizeCopy(Interior);
            for ( Y = 0; Y <= Interior.ValueData.Size.Y - 1; Y++ )
            {
                for ( X = 0; X <= Interior.ValueData.Size.X - 1; X++ )
                {
                    if ( Interior.ValueData.Value[Y, X] )
                    {
                        Flag = false;
                        if ( Y > 0 )
                        {
                            if ( X > 0 )
                            {
                                if ( !Exterior.ValueData.Value[Y - 1, X - 1] )
                                {
                                    Flag = true;
                                }
                            }
                            if ( !Exterior.ValueData.Value[Y - 1, X] )
                            {
                                Flag = true;
                            }
                            if ( X < Interior.ValueData.Size.X - 1 )
                            {
                                if ( !Exterior.ValueData.Value[Y - 1, X + 1] )
                                {
                                    Flag = true;
                                }
                            }
                        }
                        if ( X > 0 )
                        {
                            if ( !Exterior.ValueData.Value[Y, X - 1] )
                            {
                                Flag = true;
                            }
                        }
                        if ( !Exterior.ValueData.Value[Y, X] )
                        {
                            Flag = true;
                        }
                        if ( X < Interior.ValueData.Size.X - 1 )
                        {
                            if ( !Exterior.ValueData.Value[Y, X + 1] )
                            {
                                Flag = true;
                            }
                        }
                        if ( Y < Interior.ValueData.Size.Y - 1 )
                        {
                            if ( X > 0 )
                            {
                                if ( !Exterior.ValueData.Value[Y + 1, X - 1] )
                                {
                                    Flag = true;
                                }
                            }
                            if ( !Exterior.ValueData.Value[Y + 1, X] )
                            {
                                Flag = true;
                            }
                            if ( X < Interior.ValueData.Size.X - 1 )
                            {
                                if ( !Exterior.ValueData.Value[Y + 1, X + 1] )
                                {
                                    Flag = true;
                                }
                            }
                        }
                        ValueData.Value[Y, X] = !Flag;
                    }
                }
            }
        }
示例#5
0
 public void SizeCopy(clsBooleanMap Source)
 {
     ValueData.Size.X = Source.ValueData.Size.X;
     ValueData.Size.Y = Source.ValueData.Size.Y;
     ValueData.Value = new bool[ValueData.Size.Y, ValueData.Size.X];
 }
示例#6
0
        public void Remove(clsBooleanMap Source, clsBooleanMap Remove)
        {
            int X = 0;
            int Y = 0;

            SizeCopy(Source);
            for ( Y = 0; Y <= Source.ValueData.Size.Y - 1; Y++ )
            {
                for ( X = 0; X <= Source.ValueData.Size.X - 1; X++ )
                {
                    if ( Remove.ValueData.Value[Y, X] )
                    {
                        ValueData.Value[Y, X] = false;
                    }
                    else
                    {
                        ValueData.Value[Y, X] = Source.ValueData.Value[Y, X];
                    }
                }
            }
        }
示例#7
0
        public clsBooleanMap GetWaterMap()
        {
            clsBooleanMap ReturnResult = new clsBooleanMap();
            float BestDist = 0;
            bool BestIsWater = default(bool);
            sXY_int Pos = new sXY_int();
            float Dist = 0;
            int B = 0;
            int C = 0;
            sXY_int XY_int = new sXY_int();
            int X = 0;
            int Y = 0;

            ReturnResult.Blank(Map.Terrain.TileSize.X + 1, Map.Terrain.TileSize.Y + 1);
            for ( Y = 0; Y <= Map.Terrain.TileSize.Y; Y++ )
            {
                for ( X = 0; X <= Map.Terrain.TileSize.X; X++ )
                {
                    BestDist = float.MaxValue;
                    Pos = new sXY_int(X * App.TerrainGridSpacing, Y * App.TerrainGridSpacing);
                    for ( B = 0; B <= ConnectionCount - 1; B++ )
                    {
                        //If Not (Connections(B).PassageNodeA.IsOnBorder Or Connections(B).PassageNodeB.IsOnBorder) Then
                        if ( Connections[B].PassageNodeA.IsWater == Connections[B].PassageNodeB.IsWater )
                        {
                            //only do this if the waters are the same
                            //this is to make sure nodes that are connected are actually connected as water
                            XY_int = MathUtil.PointGetClosestPosOnLine(Connections[B].PassageNodeA.Pos, Connections[B].PassageNodeB.Pos, Pos);
                            Dist = Convert.ToSingle((XY_int - Pos).ToDoubles().GetMagnitude());
                            if ( Dist < BestDist )
                            {
                                BestDist = Dist;
                                if ( (Pos - Connections[B].PassageNodeA.Pos).ToDoubles().GetMagnitude() <=
                                     (Pos - Connections[B].PassageNodeB.Pos).ToDoubles().GetMagnitude() )
                                {
                                    BestIsWater = Connections[B].PassageNodeA.IsWater;
                                }
                                else
                                {
                                    BestIsWater = Connections[B].PassageNodeB.IsWater;
                                }
                            }
                        }
                    }
                    for ( C = 0; C <= PassageNodeCount - 1; C++ )
                    {
                        for ( B = 0; B <= SymmetryBlockCount - 1; B++ )
                        {
                            Dist = Convert.ToSingle((Pos - PassageNodes[B, C].Pos).ToDoubles().GetMagnitude());
                            if ( Dist < BestDist )
                            {
                                BestDist = Dist;
                                BestIsWater = PassageNodes[B, C].IsWater;
                            }
                        }
                    }
                    ReturnResult.ValueData.Value[Y, X] = BestIsWater;
                }
            }
            return ReturnResult;
        }
示例#8
0
        private clsResult FinishTextures()
        {
            clsResult ReturnResult = new clsResult("");

            if ( cbxMasterTexture.Checked )
            {
                switch ( cboTileset.SelectedIndex )
                {
                    case 0:
                        Generator.GenerateTileset = DefaultGenerator.Generator_TilesetArizona;
                        DefaultGenerator.TerrainStyle_Arizona.Watermap = Generator.GetWaterMap();
                        DefaultGenerator.TerrainStyle_Arizona.LevelCount = Generator.LevelCount;
                        Generator.Map.GenerateMasterTerrain(DefaultGenerator.TerrainStyle_Arizona);
                        DefaultGenerator.TerrainStyle_Arizona.Watermap = null;
                        break;
                    case 1:
                        Generator.GenerateTileset = DefaultGenerator.Generator_TilesetUrban;
                        DefaultGenerator.TerrainStyle_Urban.Watermap = Generator.GetWaterMap();
                        DefaultGenerator.TerrainStyle_Urban.LevelCount = Generator.LevelCount;
                        Generator.Map.GenerateMasterTerrain(DefaultGenerator.TerrainStyle_Urban);
                        DefaultGenerator.TerrainStyle_Urban.Watermap = null;
                        break;
                    case 2:
                        Generator.GenerateTileset = DefaultGenerator.Generator_TilesetRockies;
                        DefaultGenerator.TerrainStyle_Rockies.Watermap = Generator.GetWaterMap();
                        DefaultGenerator.TerrainStyle_Rockies.LevelCount = Generator.LevelCount;
                        Generator.Map.GenerateMasterTerrain(DefaultGenerator.TerrainStyle_Rockies);
                        DefaultGenerator.TerrainStyle_Rockies.Watermap = null;
                        break;
                    default:
                        ReturnResult.ProblemAdd("Error: bad tileset selection.");
                        btnGenerateLayout.Enabled = true;
                        return ReturnResult;
                }
                Generator.Map.TileType_Reset();
                Generator.Map.SetPainterToDefaults();
            }
            else
            {
                switch ( cboTileset.SelectedIndex )
                {
                    case 0:
                        Generator.Map.Tileset = App.Tileset_Arizona;
                        Generator.GenerateTileset = DefaultGenerator.Generator_TilesetArizona;
                        break;
                    case 1:
                        Generator.Map.Tileset = App.Tileset_Urban;
                        Generator.GenerateTileset = DefaultGenerator.Generator_TilesetUrban;
                        break;
                    case 2:
                        Generator.Map.Tileset = App.Tileset_Rockies;
                        Generator.GenerateTileset = DefaultGenerator.Generator_TilesetRockies;
                        break;
                    default:
                        ReturnResult.ProblemAdd("Error: bad tileset selection.");
                        btnGenerateLayout.Enabled = true;
                        return ReturnResult;
                }
                Generator.Map.TileType_Reset();
                Generator.Map.SetPainterToDefaults();
                double CliffAngle = Math.Atan(255.0D * Generator.Map.HeightMultiplier / (2.0D * (Generator.LevelCount - 1.0D) * App.TerrainGridSpacing)) -
                                    MathUtil.RadOf1Deg;
                clsBrush tmpBrush = new clsBrush((Math.Max(Generator.Map.Terrain.TileSize.X, Generator.Map.Terrain.TileSize.Y)) * 1.1D, clsBrush.enumShape.Square);
                clsMap.clsApplyCliff ApplyCliff = new clsMap.clsApplyCliff();
                ApplyCliff.Map = Generator.Map;
                ApplyCliff.Angle = CliffAngle;
                ApplyCliff.SetTris = true;
                clsBrush.sPosNum Alignments = new clsBrush.sPosNum();
                Alignments.Normal = new sXY_int((int)(Conversion.Int(Generator.Map.Terrain.TileSize.X / 2.0D)),
                    (int)(Conversion.Int(Generator.Map.Terrain.TileSize.Y / 2.0D)));
                Alignments.Alignment = Alignments.Normal;
                tmpBrush.PerformActionMapTiles(ApplyCliff, Alignments);
                bool[] RevertSlope = null;
                bool[] RevertHeight = null;
                clsBooleanMap WaterMap = new clsBooleanMap();
                clsBooleanMap bmTemp = new clsBooleanMap();
                int A = 0;
                WaterMap = Generator.GetWaterMap();
                RevertSlope = new bool[Generator.GenerateTileset.OldTextureLayers.LayerCount];
                RevertHeight = new bool[Generator.GenerateTileset.OldTextureLayers.LayerCount];
                for ( A = 0; A <= Generator.GenerateTileset.OldTextureLayers.LayerCount - 1; A++ )
                {
                    App.sLayerList.clsLayer with_2 = Generator.GenerateTileset.OldTextureLayers.Layers[A];
                    with_2.Terrainmap = Generator.Map.GenerateTerrainMap(with_2.Scale, with_2.Density);
                    if ( with_2.SlopeMax < 0.0F )
                    {
                        with_2.SlopeMax = (float)(CliffAngle - MathUtil.RadOf1Deg);
                        if ( with_2.HeightMax < 0.0F )
                        {
                            with_2.HeightMax = 255.0F;
                            bmTemp.Within(with_2.Terrainmap, WaterMap);
                            with_2.Terrainmap.ValueData = bmTemp.ValueData;
                            bmTemp.ValueData = new clsBooleanMap.clsValueData();
                            RevertHeight[A] = true;
                        }
                        RevertSlope[A] = true;
                    }
                }
                Generator.Map.MapTexturer(Generator.GenerateTileset.OldTextureLayers);
                for ( A = 0; A <= Generator.GenerateTileset.OldTextureLayers.LayerCount - 1; A++ )
                {
                    App.sLayerList.clsLayer with_3 = Generator.GenerateTileset.OldTextureLayers.Layers[A];
                    with_3.Terrainmap = null;
                    if ( RevertSlope[A] )
                    {
                        with_3.SlopeMax = -1.0F;
                    }
                    if ( RevertHeight[A] )
                    {
                        with_3.HeightMax = -1.0F;
                    }
                }
            }

            Generator.Map.LevelWater();

            Generator.Map.WaterTriCorrection();

            Generator.Map.SectorGraphicsChanges.SetAllChanged();
            Generator.Map.SectorUnitHeightsChanges.SetAllChanged();

            Generator.Map.Update();

            Generator.Map.UndoStepCreate("Generated Textures");

            if ( Generator.Map == _Owner.MainMap )
            {
                Program.frmMainInstance.PainterTerrains_Refresh(-1, -1);
                Program.frmMainInstance.MainMapTilesetChanged();
            }

            return ReturnResult;
        }