mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-23 12:42:22 -04:00
Finish modularising map generators.
This commit is contained in:
parent
59485b317d
commit
29c4d600f7
@ -21,22 +21,19 @@ using LibNoise;
|
||||
|
||||
namespace MCGalaxy.Generator {
|
||||
public static class AdvNoiseGen {
|
||||
|
||||
static Dictionary<string, Action<MapGenArgs>> generators
|
||||
= new Dictionary<string, Action<MapGenArgs>>{
|
||||
{ "billow", GenBillow2D }, { "ridgedmultifractal", GenRidged2D },
|
||||
{ "perlin", GenPerlin2D }, { "checkerboard", GenCheckerboard },
|
||||
{ "spheres", GenSpheres }, { "cylinders", GenCylinders },
|
||||
{ "voronoi", GenVoronoi }, { "perlin3d", GenPerlin3D },
|
||||
{ "perlin3dyadjust", GenPerlin3DYAdjust }, { "billow3d", GenBillow3D }
|
||||
};
|
||||
|
||||
public static bool Generate(MapGenArgs args) {
|
||||
Action<MapGenArgs> generator;
|
||||
generators.TryGetValue(args.Type, out generator);
|
||||
if (generator != null) generator(args);
|
||||
return generator != null;
|
||||
}
|
||||
public static void RegisterGenerators() {
|
||||
MapGen.RegisterAdvancedGen("billow", GenBillow2D);
|
||||
MapGen.RegisterAdvancedGen("ridgedmultifractal", GenRidged2D);
|
||||
MapGen.RegisterAdvancedGen("perlin", GenPerlin2D);
|
||||
MapGen.RegisterAdvancedGen("checkerboard", GenCheckerboard);
|
||||
MapGen.RegisterAdvancedGen("spheres", GenSpheres);
|
||||
MapGen.RegisterAdvancedGen("cylinders", GenCylinders);
|
||||
MapGen.RegisterAdvancedGen("voronoi", GenVoronoi);
|
||||
MapGen.RegisterAdvancedGen("perlin3d", GenPerlin3D);
|
||||
MapGen.RegisterAdvancedGen("perlin3dyadjust", GenPerlin3DYAdjust);
|
||||
MapGen.RegisterAdvancedGen("billow3d", GenBillow3D);
|
||||
}
|
||||
|
||||
|
||||
#region Implementations
|
||||
|
@ -22,42 +22,59 @@ namespace MCGalaxy.Generator {
|
||||
|
||||
public struct MapGenArgs {
|
||||
public Level Level;
|
||||
public string Type, RawArgs;
|
||||
public string Theme, RawArgs;
|
||||
public bool UseSeed;
|
||||
public int Seed;
|
||||
}
|
||||
|
||||
public static class MapGen {
|
||||
|
||||
public static bool IsRecognisedTheme(string s) {
|
||||
s = s.ToLower();
|
||||
return Array.IndexOf<string>(types, s) >= 0 || Array.IndexOf<string>(advTypes, s) >= 0;
|
||||
return simpleGens.ContainsKey(s) || advGens.ContainsKey(s);
|
||||
}
|
||||
|
||||
static string[] types = { "island", "mountains", "forest", "ocean", "flat",
|
||||
"pixel", "empty", "desert", "space", "rainbow", "hell" };
|
||||
static string[] advTypes = { "billow", "perlin", "checkerboard", "spheres", "cylinders",
|
||||
"voronoi", "ridgedmultifractal", "perlin3d", "perlin3dyadjust" };
|
||||
|
||||
public static void PrintThemes(Player p) {
|
||||
Player.Message(p, "Simple themes: " + String.Join(", ", types));
|
||||
Player.Message(p, "Advanced themes: " + String.Join(", ", advTypes));
|
||||
Player.Message(p, "Simple themes: " + simpleGens.Keys.Concatenate(", "));
|
||||
Player.Message(p, "Advanced themes: " + advGens.Keys.Concatenate(", "));
|
||||
}
|
||||
|
||||
public static bool OkayAxis(int len) {
|
||||
return len >= 16 && len <= 8192 && (len % 16) == 0;
|
||||
}
|
||||
|
||||
public unsafe static void Generate(Level lvl, string type, string args) {
|
||||
public static bool Generate(Level lvl, string theme, string args) {
|
||||
MapGenArgs genArgs = new MapGenArgs();
|
||||
genArgs.Level = lvl; genArgs.Type = type;
|
||||
genArgs.Level = lvl; genArgs.Theme = theme;
|
||||
genArgs.RawArgs = args;
|
||||
|
||||
genArgs.UseSeed = args != "";
|
||||
if (genArgs.UseSeed && !int.TryParse(args, out genArgs.Seed))
|
||||
genArgs.Seed = args.GetHashCode();
|
||||
Action<MapGenArgs> generator = null;
|
||||
|
||||
if (!SimpleGen.Generate(genArgs))
|
||||
AdvNoiseGen.Generate(genArgs);
|
||||
simpleGens.TryGetValue(theme, out generator);
|
||||
if (generator != null) { generator(genArgs); return true; }
|
||||
advGens.TryGetValue(theme, out generator);
|
||||
if (generator != null) { generator(genArgs); return true; }
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
static Dictionary<string, Action<MapGenArgs>> simpleGens, advGens;
|
||||
public static void RegisterSimpleGen(string theme, Action<MapGenArgs> gen) {
|
||||
simpleGens[theme.ToLower()] = gen;
|
||||
}
|
||||
|
||||
public static void RegisterAdvancedGen(string theme, Action<MapGenArgs> gen) {
|
||||
advGens[theme.ToLower()] = gen;
|
||||
}
|
||||
|
||||
static MapGen() {
|
||||
simpleGens = new Dictionary<string, Action<MapGenArgs>>();
|
||||
advGens = new Dictionary<string, Action<MapGenArgs>>();
|
||||
SimpleGen.RegisterGenerators();
|
||||
AdvNoiseGen.RegisterGenerators();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,25 +20,21 @@ using System.Collections.Generic;
|
||||
|
||||
namespace MCGalaxy.Generator {
|
||||
public static class SimpleGen {
|
||||
|
||||
static Dictionary<string, Action<MapGenArgs>> generators
|
||||
= new Dictionary<string, Action<MapGenArgs>>{
|
||||
{ "island", GenSimple }, { "mountains", GenSimple },
|
||||
{ "forest", GenSimple }, { "ocean", GenSimple },
|
||||
{ "flat", GenFlat }, { "pixel", GenPixel },
|
||||
{ "empty", GenEmpty }, { "desert", GenSimple },
|
||||
{ "space", GenSpace }, { "rainbow", GenRainbow },
|
||||
{ "hell", GenHell },
|
||||
};
|
||||
|
||||
public static bool Generate(MapGenArgs args) {
|
||||
Action<MapGenArgs> generator;
|
||||
generators.TryGetValue(args.Type, out generator);
|
||||
if (generator != null) generator(args);
|
||||
return generator != null;
|
||||
|
||||
public static void RegisterGenerators() {
|
||||
MapGen.RegisterSimpleGen("island", GenSimple);
|
||||
MapGen.RegisterSimpleGen("mountains", GenSimple);
|
||||
MapGen.RegisterSimpleGen("forest", GenSimple);
|
||||
MapGen.RegisterSimpleGen("ocean", GenSimple);
|
||||
MapGen.RegisterSimpleGen("flat", GenFlat);
|
||||
MapGen.RegisterSimpleGen("pixel", GenPixel);
|
||||
MapGen.RegisterSimpleGen("empty", GenEmpty);
|
||||
MapGen.RegisterSimpleGen("desert", GenSimple);
|
||||
MapGen.RegisterSimpleGen("space", GenSpace);
|
||||
MapGen.RegisterSimpleGen("rainbow", GenRainbow);
|
||||
MapGen.RegisterSimpleGen("hell", GenHell);
|
||||
}
|
||||
|
||||
|
||||
unsafe static void GenFlat(MapGenArgs args) {
|
||||
Level lvl = args.Level;
|
||||
int grassHeight = lvl.Height / 2;
|
||||
@ -154,7 +150,7 @@ namespace MCGalaxy.Generator {
|
||||
|
||||
static void GenSimple(MapGenArgs args) {
|
||||
RealisticMapGen gen = new RealisticMapGen();
|
||||
gen.GenerateMap(args.Level, args.Type, args.Seed, args.UseSeed);
|
||||
gen.GenerateMap(args.Level, args.Theme, args.Seed, args.UseSeed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user