Beispiel #1
0
        static bool GenerateMap(MapGenArgs genArgs)
        {
            MapGenTheme theme = MapGenTheme.Forest;

            if (genArgs.Args.Length > 0 &&
                !CommandParser.GetEnum(genArgs.Player, genArgs.Args, "Seed", ref theme))
            {
                return(false);
            }

            MapGenTemplate         templ = (MapGenTemplate)Enum.Parse(typeof(MapGenTemplate), genArgs.Theme.Substring(3), true);
            fCraftMapGeneratorArgs args  = fCraftMapGeneratorArgs.MakeTemplate(templ);
            Level map = genArgs.Level;

            float ratio = map.Height / 96.0f;

            args.MaxHeight    = (int)Math.Round(args.MaxHeight * ratio);
            args.MaxDepth     = (int)Math.Round(args.MaxDepth * ratio);
            args.SnowAltitude = (int)Math.Round(args.SnowAltitude * ratio);

            args.Theme      = theme;
            args.AddTrees   = theme == MapGenTheme.Forest;
            args.AddWater   = theme != MapGenTheme.Desert;
            args.WaterLevel = (map.Height - 1) / 2;

            fCraftMapGenerator generator = new fCraftMapGenerator(args);

            generator.Generate(map);
            return(true);
        }
Beispiel #2
0
        static bool GenerateMap(MapGenArgs genArgs)
        {
            MapGenTheme theme = MapGenTheme.Forest;

            if (genArgs.Args != "" && !Utils.TryParseEnum(genArgs.Args, out theme))
            {
                string[] themes = Enum.GetNames(typeof(MapGenTheme));
                Player.Message(genArgs.Player, "Seed must be one of the following themes: " + themes.Join());
                return(false);
            }

            MapGenTemplate         templ = (MapGenTemplate)Enum.Parse(typeof(MapGenTemplate), genArgs.Theme.Substring(3), true);
            fCraftMapGeneratorArgs args  = fCraftMapGeneratorArgs.MakeTemplate(templ);
            Level map = genArgs.Level;

            float ratio = map.Height / 96.0f;

            args.MaxHeight    = (int)Math.Round(args.MaxHeight * ratio);
            args.MaxDepth     = (int)Math.Round(args.MaxDepth * ratio);
            args.SnowAltitude = (int)Math.Round(args.SnowAltitude * ratio);

            args.Theme      = theme;
            args.AddTrees   = theme == MapGenTheme.Forest;
            args.AddWater   = theme != MapGenTheme.Desert;
            args.WaterLevel = (map.Height - 1) / 2;

            fCraftMapGenerator generator = new fCraftMapGenerator(args);

            generator.Generate(map);
            return(true);
        }
Beispiel #3
0
        public static MapGeneratorArgs MakeTemplate(MapGenTemplate template)
        {
            switch (template)
            {
            case MapGenTemplate.Archipelago:
                return(new MapGeneratorArgs {
                    MaxHeight = 8,
                    MaxDepth = 20,
                    FeatureScale = 3,
                    Roughness = .46f,
                    MatchWaterCoverage = true,
                    WaterCoverage = .85f
                });

            case MapGenTemplate.Atoll:
                return(new MapGeneratorArgs {
                    Theme = MapGenTheme.Desert,
                    MaxHeight = 2,
                    MaxDepth = 39,
                    UseBias = true,
                    Bias = .9f,
                    MidPoint = 1,
                    LoweredCorners = 4,
                    FeatureScale = 2,
                    DetailScale = 5,
                    MarbledHeightmap = true,
                    InvertHeightmap = true,
                    MatchWaterCoverage = true,
                    WaterCoverage = .95f
                });

            case MapGenTemplate.Bay:
                return(new MapGeneratorArgs {
                    MaxHeight = 22,
                    MaxDepth = 12,
                    UseBias = true,
                    Bias = 1,
                    MidPoint = -1,
                    RaisedCorners = 3,
                    LoweredCorners = 1,
                    TreeSpacingMax = 12,
                    TreeSpacingMin = 6,
                    MarbledHeightmap = true,
                    DelayBias = true
                });

            case MapGenTemplate.Dunes:
                return(new MapGeneratorArgs {
                    AddTrees = false,
                    AddWater = false,
                    Theme = MapGenTheme.Desert,
                    MaxHeight = 12,
                    MaxDepth = 7,
                    FeatureScale = 2,
                    DetailScale = 3,
                    Roughness = .44f,
                    MarbledHeightmap = true,
                    InvertHeightmap = true
                });

            case MapGenTemplate.Hills:
                return(new MapGeneratorArgs {
                    AddWater = false,
                    MaxHeight = 8,
                    MaxDepth = 8,
                    FeatureScale = 2,
                    TreeSpacingMin = 7,
                    TreeSpacingMax = 13
                });

            case MapGenTemplate.Ice:
                return(new MapGeneratorArgs {
                    AddTrees = false,
                    Theme = MapGenTheme.Arctic,
                    MaxHeight = 2,
                    MaxDepth = 2032,
                    FeatureScale = 2,
                    DetailScale = 7,
                    Roughness = .64f,
                    MarbledHeightmap = true,
                    MatchWaterCoverage = true,
                    WaterCoverage = .3f,
                    MaxHeightVariation = 0,
                    AddIgloos = true
                });

            case MapGenTemplate.Island:
                return(new MapGeneratorArgs {
                    MaxHeight = 16,
                    MaxDepth = 39,
                    UseBias = true,
                    Bias = .7f,
                    MidPoint = 1,
                    LoweredCorners = 4,
                    FeatureScale = 3,
                    DetailScale = 7,
                    MarbledHeightmap = true,
                    DelayBias = true,
                    AddBeaches = true,
                    Roughness = 0.45f
                });

            case MapGenTemplate.Lake:
                return(new MapGeneratorArgs {
                    MaxHeight = 14,
                    MaxDepth = 20,
                    UseBias = true,
                    Bias = .65f,
                    MidPoint = -1,
                    RaisedCorners = 4,
                    FeatureScale = 2,
                    Roughness = .56f,
                    MatchWaterCoverage = true,
                    WaterCoverage = .3f
                });

            case MapGenTemplate.Mountains:
                return(new MapGeneratorArgs {
                    AddWater = false,
                    MaxHeight = 40,
                    MaxDepth = 10,
                    FeatureScale = 1,
                    DetailScale = 7,
                    MarbledHeightmap = true,
                    AddSnow = true,
                    MatchWaterCoverage = true,
                    WaterCoverage = .5f,
                    Roughness = .55f,
                    CliffThreshold = .9f
                });

            case MapGenTemplate.Random:
                return(new MapGeneratorArgs());

            case MapGenTemplate.River:
                return(new MapGeneratorArgs {
                    MaxHeight = 22,
                    MaxDepth = 8,
                    FeatureScale = 0,
                    DetailScale = 6,
                    MarbledHeightmap = true,
                    MatchWaterCoverage = true,
                    WaterCoverage = .31f
                });

            case MapGenTemplate.Streams:
                return(new MapGeneratorArgs {
                    MaxHeight = 5,
                    MaxDepth = 4,
                    FeatureScale = 2,
                    DetailScale = 7,
                    Roughness = .55f,
                    MarbledHeightmap = true,
                    MatchWaterCoverage = true,
                    WaterCoverage = .25f,
                    TreeSpacingMin = 8,
                    TreeSpacingMax = 14
                });

            case MapGenTemplate.Peninsula:
                return(new MapGeneratorArgs {
                    MaxHeight = 22,
                    MaxDepth = 12,
                    UseBias = true,
                    Bias = .5f,
                    MidPoint = -1,
                    RaisedCorners = 3,
                    LoweredCorners = 1,
                    TreeSpacingMax = 12,
                    TreeSpacingMin = 6,
                    InvertHeightmap = true,
                    WaterCoverage = .5f
                });

            case MapGenTemplate.Flat:
                return(new MapGeneratorArgs {
                    MaxHeight = 0,
                    MaxDepth = 0,
                    MaxHeightVariation = 0,
                    AddWater = false,
                    DetailScale = 0,
                    FeatureScale = 0,
                    AddCliffs = false
                });

            default:
                throw new ArgumentOutOfRangeException("template");
            }
        }
Beispiel #4
0
        public static MapGeneratorArgs MakeTemplate(MapGenTemplate template)
        {
            switch (template)
            {
                case MapGenTemplate.Archipelago:
                    return new MapGeneratorArgs
                    {
                        MaxHeight = 8,
                        MaxDepth = 20,
                        FeatureScale = 3,
                        Roughness = .46f,
                        MatchWaterCoverage = true,
                        WaterCoverage = .85f
                    };

                case MapGenTemplate.Atoll:
                    return new MapGeneratorArgs
                    {
                        Theme = MapGenTheme.Desert,
                        MaxHeight = 2,
                        MaxDepth = 39,
                        UseBias = true,
                        Bias = .9f,
                        MidPoint = 1,
                        LoweredCorners = 4,
                        FeatureScale = 2,
                        DetailScale = 5,
                        MarbledHeightmap = true,
                        InvertHeightmap = true,
                        MatchWaterCoverage = true,
                        WaterCoverage = .95f
                    };

                case MapGenTemplate.Bay:
                    return new MapGeneratorArgs
                    {
                        MaxHeight = 22,
                        MaxDepth = 12,
                        UseBias = true,
                        Bias = 1,
                        MidPoint = -1,
                        RaisedCorners = 3,
                        LoweredCorners = 1,
                        TreeSpacingMax = 12,
                        TreeSpacingMin = 6,
                        MarbledHeightmap = true,
                        DelayBias = true
                    };

                case MapGenTemplate.Dunes:
                    return new MapGeneratorArgs
                    {
                        AddTrees = false,
                        AddWater = false,
                        Theme = MapGenTheme.Desert,
                        MaxHeight = 12,
                        MaxDepth = 7,
                        FeatureScale = 2,
                        DetailScale = 3,
                        Roughness = .44f,
                        MarbledHeightmap = true,
                        InvertHeightmap = true
                    };

                case MapGenTemplate.Hills:
                    return new MapGeneratorArgs
                    {
                        AddWater = false,
                        MaxHeight = 8,
                        MaxDepth = 8,
                        FeatureScale = 2,
                        TreeSpacingMin = 7,
                        TreeSpacingMax = 13
                    };

                case MapGenTemplate.Ice:
                    return new MapGeneratorArgs
                    {
                        AddTrees = false,
                        Theme = MapGenTheme.Arctic,
                        MaxHeight = 2,
                        MaxDepth = 2032,
                        FeatureScale = 2,
                        DetailScale = 7,
                        Roughness = .64f,
                        MarbledHeightmap = true,
                        MatchWaterCoverage = true,
                        WaterCoverage = .3f,
                        MaxHeightVariation = 0
                    };

                case MapGenTemplate.Island:
                    return new MapGeneratorArgs
                    {
                        MaxHeight = 16,
                        MaxDepth = 39,
                        UseBias = true,
                        Bias = .7f,
                        MidPoint = 1,
                        LoweredCorners = 4,
                        FeatureScale = 3,
                        DetailScale = 7,
                        MarbledHeightmap = true,
                        DelayBias = true,
                        AddBeaches = true,
                        Roughness = 0.45f
                    };

                case MapGenTemplate.Lake:
                    return new MapGeneratorArgs
                    {
                        MaxHeight = 14,
                        MaxDepth = 20,
                        UseBias = true,
                        Bias = .65f,
                        MidPoint = -1,
                        RaisedCorners = 4,
                        FeatureScale = 2,
                        Roughness = .56f,
                        MatchWaterCoverage = true,
                        WaterCoverage = .3f
                    };

                case MapGenTemplate.Mountains:
                    return new MapGeneratorArgs
                    {
                        AddWater = false,
                        MaxHeight = 40,
                        MaxDepth = 10,
                        FeatureScale = 1,
                        DetailScale = 7,
                        MarbledHeightmap = true,
                        AddSnow = true,
                        MatchWaterCoverage = true,
                        WaterCoverage = .5f,
                        Roughness = .55f,
                        CliffThreshold = .9f
                    };

                case MapGenTemplate.Random:
                    return new MapGeneratorArgs();

                case MapGenTemplate.River:
                    return new MapGeneratorArgs
                    {
                        MaxHeight = 22,
                        MaxDepth = 8,
                        FeatureScale = 0,
                        DetailScale = 6,
                        MarbledHeightmap = true,
                        MatchWaterCoverage = true,
                        WaterCoverage = .31f
                    };

                case MapGenTemplate.Streams:
                    return new MapGeneratorArgs
                    {
                        MaxHeight = 5,
                        MaxDepth = 4,
                        FeatureScale = 2,
                        DetailScale = 7,
                        Roughness = .55f,
                        MarbledHeightmap = true,
                        MatchWaterCoverage = true,
                        WaterCoverage = .25f,
                        TreeSpacingMin = 8,
                        TreeSpacingMax = 14
                    };

                case MapGenTemplate.Peninsula:
                    return new MapGeneratorArgs
                    {
                        MaxHeight = 22,
                        MaxDepth = 12,
                        UseBias = true,
                        Bias = .5f,
                        MidPoint = -1,
                        RaisedCorners = 3,
                        LoweredCorners = 1,
                        TreeSpacingMax = 12,
                        TreeSpacingMin = 6,
                        InvertHeightmap = true,
                        WaterCoverage = .5f
                    };

                case MapGenTemplate.Flat:
                    return new MapGeneratorArgs
                    {
                        MaxHeight = 0,
                        MaxDepth = 0,
                        MaxHeightVariation = 0,
                        AddWater = false,
                        DetailScale = 0,
                        FeatureScale = 0,
                        AddCliffs = false
                    };

                default:
                    throw new ArgumentOutOfRangeException("template");
            }
        }