diff options
Diffstat (limited to 'biome_infos.go')
| -rw-r--r-- | biome_infos.go | 367 | 
1 files changed, 173 insertions, 194 deletions
diff --git a/biome_infos.go b/biome_infos.go index c45294c..b552328 100644 --- a/biome_infos.go +++ b/biome_infos.go @@ -1,206 +1,185 @@  package main  import ( +	"bufio" +	"fmt"  	"github.com/kch42/gomcmap/mcmap"  	"github.com/mattn/go-gtk/gdk" +	"io" +	"strconv" +	"strings"  ) -var bioList = []mcmap.Biome{ -	mcmap.BioOcean, -	mcmap.BioPlains, -	mcmap.BioDesert, -	mcmap.BioExtremeHills, -	mcmap.BioForest, -	mcmap.BioTaiga, -	mcmap.BioSwampland, -	mcmap.BioRiver, -	mcmap.BioHell, -	mcmap.BioSky, -	mcmap.BioFrozenOcean, -	mcmap.BioFrozenRiver, -	mcmap.BioIcePlains, -	mcmap.BioIceMountains, -	mcmap.BioMushroomIsland, -	mcmap.BioMushroomIslandShore, -	mcmap.BioBeach, -	mcmap.BioDesertHills, -	mcmap.BioForestHills, -	mcmap.BioTaigaHills, -	mcmap.BioExtremeHillsEdge, -	mcmap.BioJungle, -	mcmap.BioJungleHills, -	mcmap.BioJungleEdge, -	mcmap.BioDeepOcean, -	mcmap.BioStoneBeach, -	mcmap.BioColdBeach, -	mcmap.BioBirchForest, -	mcmap.BioBirchForestHills, -	mcmap.BioRoofedForest, -	mcmap.BioColdTaiga, -	mcmap.BioColdTaigaHills, -	mcmap.BioMegaTaiga, -	mcmap.BioMegaTaigaHills, -	mcmap.BioExtremeHillsPlus, -	mcmap.BioSavanna, -	mcmap.BioSavannaPlateau, -	mcmap.BioMesa, -	mcmap.BioMesaPlateauF, -	mcmap.BioMesaPlateau, -	mcmap.BioSunflowerPlains, -	mcmap.BioDesertM, -	mcmap.BioExtremeHillsM, -	mcmap.BioFlowerForest, -	mcmap.BioTaigaM, -	mcmap.BioSwamplandM, -	mcmap.BioIcePlainsSpikes, -	mcmap.BioIceMountainsSpikes, -	mcmap.BioJungleM, -	mcmap.BioJungleEdgeM, -	mcmap.BioBirchForestM, -	mcmap.BioBirchForestHillsM, -	mcmap.BioRoofedForestM, -	mcmap.BioColdTaigaM, -	mcmap.BioMegaSpruceTaiga, -	mcmap.BioMegaSpruceTaigaHills, -	mcmap.BioExtremeHillsPlusM, -	mcmap.BioSavannaM, -	mcmap.BioSavannaPlateauM, -	mcmap.BioMesaBryce, -	mcmap.BioMesaPlateauFM, -	mcmap.BioMesaPlateauM, -	mcmap.BioUncalculated, +type BiomeInfo struct { +	ID       mcmap.Biome +	SnowLine int +	Color    string +	Name     string  } -var bioColors = map[mcmap.Biome]*gdk.Color{ -	mcmap.BioOcean:                gdk.NewColor("#0000ff"), -	mcmap.BioPlains:               gdk.NewColor("#9fe804"), -	mcmap.BioDesert:               gdk.NewColor("#f5ff58"), -	mcmap.BioExtremeHills:         gdk.NewColor("#a75300"), -	mcmap.BioForest:               gdk.NewColor("#006f2a"), -	mcmap.BioTaiga:                gdk.NewColor("#05795a"), -	mcmap.BioSwampland:            gdk.NewColor("#6a7905"), -	mcmap.BioRiver:                gdk.NewColor("#196eff"), -	mcmap.BioHell:                 gdk.NewColor("#d71900"), -	mcmap.BioSky:                  gdk.NewColor("#871eb3"), -	mcmap.BioFrozenOcean:          gdk.NewColor("#d6f0ff"), -	mcmap.BioFrozenRiver:          gdk.NewColor("#8fb6cd"), -	mcmap.BioIcePlains:            gdk.NewColor("#fbfbfb"), -	mcmap.BioIceMountains:         gdk.NewColor("#c6bfb1"), -	mcmap.BioMushroomIsland:       gdk.NewColor("#9776a4"), -	mcmap.BioMushroomIslandShore:  gdk.NewColor("#9e8ebc"), -	mcmap.BioBeach:                gdk.NewColor("#fffdc9"), -	mcmap.BioDesertHills:          gdk.NewColor("#adb354"), -	mcmap.BioForestHills:          gdk.NewColor("#40694f"), -	mcmap.BioTaigaHills:           gdk.NewColor("#5b8578"), -	mcmap.BioExtremeHillsEdge:     gdk.NewColor("#a77748"), -	mcmap.BioJungle:               gdk.NewColor("#22db04"), -	mcmap.BioJungleHills:          gdk.NewColor("#63bf54"), -	mcmap.BioJungleEdge:           gdk.NewColor("#40ba2c"), -	mcmap.BioDeepOcean:            gdk.NewColor("#0000b3"), -	mcmap.BioStoneBeach:           gdk.NewColor("#9292a6"), -	mcmap.BioColdBeach:            gdk.NewColor("#c7c7e8"), -	mcmap.BioBirchForest:          gdk.NewColor("#1d964b"), -	mcmap.BioBirchForestHills:     gdk.NewColor("#498045"), -	mcmap.BioRoofedForest:         gdk.NewColor("#075a26"), -	mcmap.BioColdTaiga:            gdk.NewColor("#1b948e"), -	mcmap.BioColdTaigaHills:       gdk.NewColor("#1d7a76"), -	mcmap.BioMegaTaiga:            gdk.NewColor("#1f8f68"), -	mcmap.BioMegaTaigaHills:       gdk.NewColor("#217a5c"), -	mcmap.BioExtremeHillsPlus:     gdk.NewColor("#d76a00"), -	mcmap.BioSavanna:              gdk.NewColor("#b2bc0f"), -	mcmap.BioSavannaPlateau:       gdk.NewColor("#aba60e"), -	mcmap.BioMesa:                 gdk.NewColor("#ff6c00"), -	mcmap.BioMesaPlateauF:         gdk.NewColor("#d9691e"), -	mcmap.BioMesaPlateau:          gdk.NewColor("#d95b07"), -	mcmap.BioSunflowerPlains:      gdk.NewColor("#ffd504"), -	mcmap.BioDesertM:              gdk.NewColor("#f4ff3f"), -	mcmap.BioExtremeHillsM:        gdk.NewColor("#8c4500"), -	mcmap.BioFlowerForest:         gdk.NewColor("#e02f4a"), -	mcmap.BioTaigaM:               gdk.NewColor("#0a6148"), -	mcmap.BioSwamplandM:           gdk.NewColor("#58630e"), -	mcmap.BioIcePlainsSpikes:      gdk.NewColor("#ace8e8"), -	mcmap.BioIceMountainsSpikes:   gdk.NewColor("#91cccc"), -	mcmap.BioJungleM:              gdk.NewColor("#30ba07"), -	mcmap.BioJungleEdgeM:          gdk.NewColor("#3e9130"), -	mcmap.BioBirchForestM:         gdk.NewColor("#228548"), -	mcmap.BioBirchForestHillsM:    gdk.NewColor("#2b7547"), -	mcmap.BioRoofedForestM:        gdk.NewColor("#1a5428"), -	mcmap.BioColdTaigaM:           gdk.NewColor("#0f706b"), -	mcmap.BioMegaSpruceTaiga:      gdk.NewColor("#198058"), -	mcmap.BioMegaSpruceTaigaHills: gdk.NewColor("#156e4c"), -	mcmap.BioExtremeHillsPlusM:    gdk.NewColor("#ba5c00"), -	mcmap.BioSavannaM:             gdk.NewColor("#858111"), -	mcmap.BioSavannaPlateauM:      gdk.NewColor("#87830b"), -	mcmap.BioMesaBryce:            gdk.NewColor("#ff5100"), -	mcmap.BioMesaPlateauFM:        gdk.NewColor("#ba5a1a"), -	mcmap.BioMesaPlateauM:         gdk.NewColor("#ba4e06"), -	mcmap.BioUncalculated:         gdk.NewColor("#333333"), +func ReadBiomeInfos(r io.Reader) ([]BiomeInfo, error) { +	var biomes []BiomeInfo + +	sc := bufio.NewScanner(r) +	for i := 1; sc.Scan(); i++ { +		line := sc.Text() +		if line == "" { +			continue +		} +		parts := strings.SplitN(line, "\t", 4) + +		if len(parts) != 4 { +			return nil, fmt.Errorf("Line %d corrupted: Not enough parts", i) +		} + +		id, err := strconv.ParseUint(parts[0], 10, 8) +		if err != nil { +			return nil, fmt.Errorf("Line %d corrupted: %s", i, err) +		} + +		snow, err := strconv.ParseInt(parts[1], 10, 32) +		if err != nil { +			return nil, fmt.Errorf("Line %d corrupted: %s", i, err) +		} +		if (snow >= mcmap.ChunkSizeY) || (snow < 0) { +			snow = mcmap.ChunkSizeY +		} +		 +		info := BiomeInfo{ +			ID:       mcmap.Biome(id), +			SnowLine: int(snow), +			Color:    parts[2], +			Name:     parts[3], +		} +		fmt.Println(info) +		biomes = append(biomes, info) +	} + +	if err := sc.Err(); err != nil { +		return nil, err +	} + +	return biomes, nil  } -// snowLines maps a biome to the lowest y coordinate that can have snow naturally. -// TODO: Get the actual values that Minecraft uses (could not find them). -var snowLines = map[mcmap.Biome]int{ -	mcmap.BioOcean:                mcmap.ChunkSizeY, -	mcmap.BioPlains:               mcmap.ChunkSizeY, -	mcmap.BioDesert:               mcmap.ChunkSizeY, -	mcmap.BioExtremeHills:         95, -	mcmap.BioForest:               mcmap.ChunkSizeY, -	mcmap.BioTaiga:                mcmap.ChunkSizeY, -	mcmap.BioSwampland:            mcmap.ChunkSizeY, -	mcmap.BioRiver:                mcmap.ChunkSizeY, -	mcmap.BioHell:                 mcmap.ChunkSizeY, -	mcmap.BioSky:                  mcmap.ChunkSizeY, -	mcmap.BioFrozenOcean:          0, -	mcmap.BioFrozenRiver:          0, -	mcmap.BioIcePlains:            0, -	mcmap.BioIceMountains:         0, -	mcmap.BioMushroomIsland:       mcmap.ChunkSizeY, -	mcmap.BioMushroomIslandShore:  mcmap.ChunkSizeY, -	mcmap.BioBeach:                mcmap.ChunkSizeY, -	mcmap.BioDesertHills:          mcmap.ChunkSizeY, -	mcmap.BioForestHills:          mcmap.ChunkSizeY, -	mcmap.BioTaigaHills:           0, -	mcmap.BioExtremeHillsEdge:     95, -	mcmap.BioJungle:               mcmap.ChunkSizeY, -	mcmap.BioJungleHills:          mcmap.ChunkSizeY, -	mcmap.BioJungleEdge:           mcmap.ChunkSizeY, -	mcmap.BioDeepOcean:            mcmap.ChunkSizeY, -	mcmap.BioStoneBeach:           mcmap.ChunkSizeY, -	mcmap.BioColdBeach:            0, -	mcmap.BioBirchForest:          mcmap.ChunkSizeY, -	mcmap.BioBirchForestHills:     mcmap.ChunkSizeY, -	mcmap.BioRoofedForest:         mcmap.ChunkSizeY, -	mcmap.BioColdTaiga:            0, -	mcmap.BioColdTaigaHills:       0, -	mcmap.BioMegaTaiga:            mcmap.ChunkSizeY, -	mcmap.BioMegaTaigaHills:       mcmap.ChunkSizeY, -	mcmap.BioExtremeHillsPlus:     95, -	mcmap.BioSavanna:              mcmap.ChunkSizeY, -	mcmap.BioSavannaPlateau:       mcmap.ChunkSizeY, -	mcmap.BioMesa:                 mcmap.ChunkSizeY, -	mcmap.BioMesaPlateauF:         mcmap.ChunkSizeY, -	mcmap.BioMesaPlateau:          mcmap.ChunkSizeY, -	mcmap.BioSunflowerPlains:      mcmap.ChunkSizeY, -	mcmap.BioDesertM:              mcmap.ChunkSizeY, -	mcmap.BioExtremeHillsM:        95, -	mcmap.BioFlowerForest:         mcmap.ChunkSizeY, -	mcmap.BioTaigaM:               mcmap.ChunkSizeY, -	mcmap.BioSwamplandM:           mcmap.ChunkSizeY, -	mcmap.BioIcePlainsSpikes:      0, -	mcmap.BioIceMountainsSpikes:   0, -	mcmap.BioJungleM:              mcmap.ChunkSizeY, -	mcmap.BioJungleEdgeM:          mcmap.ChunkSizeY, -	mcmap.BioBirchForestM:         mcmap.ChunkSizeY, -	mcmap.BioBirchForestHillsM:    mcmap.ChunkSizeY, -	mcmap.BioRoofedForestM:        mcmap.ChunkSizeY, -	mcmap.BioColdTaigaM:           0, -	mcmap.BioMegaSpruceTaiga:      mcmap.ChunkSizeY, -	mcmap.BioMegaSpruceTaigaHills: mcmap.ChunkSizeY, -	mcmap.BioExtremeHillsPlusM:    95, -	mcmap.BioSavannaM:             mcmap.ChunkSizeY, -	mcmap.BioSavannaPlateauM:      mcmap.ChunkSizeY, -	mcmap.BioMesaBryce:            mcmap.ChunkSizeY, -	mcmap.BioMesaPlateauFM:        mcmap.ChunkSizeY, -	mcmap.BioMesaPlateauM:         mcmap.ChunkSizeY, -	mcmap.BioUncalculated:         mcmap.ChunkSizeY, +func WriteBiomeInfos(biomes []BiomeInfo, w io.Writer) error { +	for _, bio := range biomes { +		if _, err := fmt.Fprintf(w, "%d\t%d\t%s\t%s\n", bio.ID, bio.SnowLine, bio.Color, bio.Name); err != nil { +			return err +		} +	} + +	return nil +} + +type BiomeLookup map[mcmap.Biome]BiomeInfo + +var colBlack = gdk.NewColor("#000000") +var colBuf = make(ColorBuffer) + +func (bl BiomeLookup) Color(bio mcmap.Biome) *gdk.Color { +	if info, ok := bl[bio]; ok { +		return colBuf.Color(info.Color) +	} + +	fmt.Println("FAIL") +	return colBlack +} + +func (bl BiomeLookup) SnowLine(bio mcmap.Biome) int { +	if info, ok := bl[bio]; ok { +		return info.SnowLine +	} + +	return mcmap.ChunkSizeY +} + +func (bl BiomeLookup) Name(bio mcmap.Biome) string { +	if info, ok := bl[bio]; ok { +		return info.Name +	} + +	return "?" +} + +func MkBiomeLookup(biomes []BiomeInfo) BiomeLookup { +	lookup := make(BiomeLookup) +	for _, biome := range biomes { +		lookup[biome.ID] = biome +	} +	return lookup +} + +var defaultBiomes = `0	-1	#0000ff	Ocean +1	-1	#9fe804	Plains +2	-1	#f5ff58	Desert +3	95	#a75300	Extreme Hills +4	-1	#006f2a	Forest +5	-1	#05795a	Taiga +6	-1	#6a7905	Swampland +7	-1	#196eff	River +8	-1	#d71900	Hell +9	-1	#871eb3	Sky +10	0	#d6f0ff	Frozen Ocean +11	0	#8fb6cd	Frozen River +12	0	#fbfbfb	Ice Plains +13	0	#c6bfb1	Ice Mountains +14	-1	#9776a4	Mushroom Island +15	-1	#9e8ebc	Mushroom Island Shore +16	-1	#fffdc9	Beach +17	-1	#adb354	Desert Hills +18	-1	#40694f	Forest Hills +19	0	#5b8578	Taiga Hills +20	95	#a77748	Extreme Hills Edge +21	-1	#22db04	Jungle +22	-1	#63bf54	Jungle Hills +23	-1	#40ba2c	Jungle Edge +24	-1	#0000b3	Deep Ocean +25	-1	#9292a6	Stone Beach +26	0	#c7c7e8	Cold Beach +27	-1	#1d964b	Birch Forest +28	-1	#498045	Birch Forest Hills +29	-1	#075a26	Roofed Forest +30	0	#1b948e	Cold Taiga +31	0	#1d7a76	Cold Taiga Hills +32	-1	#1f8f68	Mega Taiga +33	-1	#217a5c	Mega Taiga Hills +34	95	#d76a00	Extreme Hills+ +35	-1	#b2bc0f	Savanna +36	-1	#aba60e	Savanna Plateau +37	-1	#ff6c00	Mesa +38	-1	#d9691e	Mesa Plateau F +39	-1	#d95b07	Mesa Plateau +40	-1	#ffd504	Sunflower Plains +41	-1	#f4ff3f	Desert M +42	95	#8c4500	Extreme Hills M +43	-1	#e02f4a	Flower Forest +44	-1	#0a6148	Taiga M +45	-1	#58630e	Swampland M +46	0	#ace8e8	Ice Plains Spikes +47	0	#91cccc	Ice Mountains Spikes +48	-1	#30ba07	Jungle M +49	-1	#3e9130	JungleEdge M +50	-1	#228548	Birch Forest M +51	-1	#2b7547	Birch Forest Hills M +52	-1	#1a5428	Roofed Forest M +53	0	#0f706b	Cold Taiga M +54	-1	#198058	Mega Spruce Taiga +55	-1	#156e4c	Mega Spruce Taiga Hills +56	95	#ba5c00	Extreme Hills+ M +57	-1	#858111	Savanna M +58	-1	#87830b	Savanna Plateau M +59	-1	#ff5100	Mesa (Bryce) +60	-1	#ba5a1a	Mesa Plateau F M +61	-1	#ba4e06	Mesa Plateau M +255	-1	#333333	(Uncalculated) +` + +func ReadDefaultBiomes() []BiomeInfo { +	r := strings.NewReader(defaultBiomes) +	biomes, err := ReadBiomeInfos(r) +	if err != nil { +		panic(err) +	} +	return biomes  }  | 
