summaryrefslogtreecommitdiff
path: root/biome_infos.go
diff options
context:
space:
mode:
Diffstat (limited to 'biome_infos.go')
-rw-r--r--biome_infos.go367
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
}