linear palette

This commit is contained in:
Tnze
2021-03-31 16:00:15 +08:00
parent 0acecb936d
commit adf77e2661
3 changed files with 85 additions and 12 deletions

View File

@ -19,16 +19,15 @@ import (
)
var colors []color.RGBA64
var regionWorkerNum = runtime.NumCPU()
var sectionWorkerNum = 1
var (
regionWorkerNum = flag.Int("workers", runtime.NumCPU(), "worker numbers")
regionsFold = flag.String("region", filepath.Join(os.Getenv("AppData"), ".minecraft", "saves", "World", "region"), "region directory path")
drawBigPicture = flag.Bool("bigmap", true, "draw the bit map")
drawBigPicture = flag.Bool("bigmap", true, "draw the big map")
)
func main() {
flag.Usage = usage
flag.Parse()
de, err := os.ReadDir(*regionsFold)
@ -61,7 +60,7 @@ func main() {
*region.Region
}
// Open mca files
var rs = make(chan regions, regionWorkerNum)
var rs = make(chan regions, *regionWorkerNum)
go func() {
for _, dir := range de {
name := dir.Name()
@ -95,7 +94,7 @@ func main() {
}
c := make(chan task)
var wg sync.WaitGroup
for i := 0; i < regionWorkerNum; i++ {
for i := 0; i < *regionWorkerNum; i++ {
go func() {
var column save.Column
for task := range c {

View File

@ -4,7 +4,6 @@ import (
"bytes"
_ "embed"
"encoding/gob"
"fmt"
"github.com/Tnze/go-mc/data/block"
"image"
"image/png"
@ -37,11 +36,6 @@ func init() {
}
}
func usage() {
_, _ = fmt.Fprintf(os.Stderr, "usage: %s [-region <region path>] \n", os.Args[0])
os.Exit(1)
}
func mkmax(c, n *int) {
if *c < *n {
*c = *n

80
save/palette.go Normal file
View File

@ -0,0 +1,80 @@
package save
import (
"github.com/Tnze/go-mc/nbt"
pk "github.com/Tnze/go-mc/net/packet"
"io"
)
type BlockState interface {
}
type palette interface {
id(v BlockState) int
value(i int) BlockState
io.ReaderFrom
io.WriterTo
read(r nbt.DecoderReader) (int, error)
}
type linearPalette struct {
onResize func(n int, v BlockState) int
sToID map[BlockState]int
idTos map[int]BlockState
values []BlockState
bits int
}
func (l *linearPalette) id(v BlockState) int {
for i, t := range l.values {
if t == v {
return i
}
}
if cap(l.values)-len(l.values) > 0 {
l.values = append(l.values, v)
return len(l.values) - 1
}
return l.onResize(l.bits+1, v)
}
func (l *linearPalette) value(i int) BlockState {
if i >= 0 && i < len(l.values) {
return l.values[i]
}
return nil
}
func (l *linearPalette) ReadFrom(r io.Reader) (n int64, err error) {
var size, value pk.VarInt
if n, err = size.ReadFrom(r); err != nil {
return
}
for i := 0; i < int(size); i++ {
if nn, err := value.ReadFrom(r); err != nil {
return n + nn, err
} else {
n += nn
}
l.values[i] = l.idTos[int(value)]
}
return
}
func (l *linearPalette) WriteTo(w io.Writer) (n int64, err error) {
if n, err = pk.VarInt(len(l.values)).WriteTo(w); err != nil {
return
}
for _, v := range l.values {
if nn, err := pk.VarInt(l.sToID[v]).WriteTo(w); err != nil {
return n + nn, err
} else {
n += nn
}
}
return
}
func (l *linearPalette) read(r nbt.DecoderReader) (int, error) {
panic("not implemented yet")
}