started tile serialization

This commit is contained in:
2019-11-10 19:52:01 +03:00
parent 3251d00dac
commit b734e538f4
3 changed files with 99 additions and 18 deletions

View File

@ -108,6 +108,16 @@ func FillColorRing(colorValue uint8, minGlow, maxGlow, step int) *cdeque {
return c
}
func DeviatedColorRing(colorValue uint8, minGlow, maxGlow int) *cdeque {
q := make([]uint8, 0)
color := int(colorValue)
color = crng.Range(minGlow, maxGlow) + color
q = append(q, colorValue)
c := &cdeque{}
c.PushBack(uint8(color))
return c
}
func (app Appearance) Type() string {
return ecs.AppearanceComponent
}
@ -116,24 +126,24 @@ func (app *Appearance) MarshalJSON() ([]byte, error) {
buffer := bytes.NewBufferString("{")
//glyph
buffer.WriteString(`"glyph":{`)
switch app.Glyph.(type) {
case PlainGlyphHolder:
if _, ok := app.Glyph.(*PlainGlyphHolder); ok {
buffer.WriteString(fmt.Sprintf(`"type":"plain", "chars":"%s"`, app.Glyph.GetGlyph()))
break
}
//note the comma
buffer.WriteString("},")
//color
buffer.WriteString(`"color":{`)
buffer.WriteString(getColorJson("fg", app.ColorSet.Fg) + ",")
buffer.WriteString(getColorJson("bg", app.ColorSet.Fg) + ",")
buffer.WriteString(getColorJson("darkfg", app.ColorSet.Fg) + ",")
buffer.WriteString(getColorJson("darkbg", app.ColorSet.Fg))
buffer.WriteString(getColorJson("bg", app.ColorSet.Bg) + ",")
buffer.WriteString(getColorJson("darkfg", app.ColorSet.DarkFg) + ",")
buffer.WriteString(getColorJson("darkbg", app.ColorSet.DarkBg))
buffer.WriteString("}")
buffer.WriteString("}")
fmt.Printf("\n\nbuffer: %s\n\n", buffer.String())
return buffer.Bytes(), nil
}
@ -143,18 +153,45 @@ func (app *Appearance) UnmarshalJSON(buffer []byte) error {
func getColorJson(field string, holder ColorHolder) string {
result := ""
switch holder.(type) {
case PlainColorHolder:
result = fmt.Sprintf(`"plain":[%d,%d,%d,%d]`,
holder.(PlainColorHolder).A,
holder.(PlainColorHolder).R,
holder.(PlainColorHolder).G,
holder.(PlainColorHolder).B,
if _, dch := holder.(*DanceColorHolder); dch {
result = fmt.Sprintf(`{"dance":{`)
result = result + detectRing("a", holder.(*DanceColorHolder).A) + ","
result = result + detectRing("r", holder.(*DanceColorHolder).R) + ","
result = result + detectRing("g", holder.(*DanceColorHolder).G) + ","
result = result + detectRing("b", holder.(*DanceColorHolder).B)
result = result + "}}"
}
if _, pch := holder.(*PlainColorHolder); pch {
result = fmt.Sprintf(`{"plain":[%d,%d,%d,%d]}`,
holder.(*PlainColorHolder).A,
holder.(*PlainColorHolder).R,
holder.(*PlainColorHolder).G,
holder.(*PlainColorHolder).B,
)
break
case DanceColorHolder:
return "" //fixme!!!
break
}
return fmt.Sprintf(`"%s":%s`, field, result)
}
func detectRing(channel string, something interface{}) string {
result := ""
switch something.(type) {
case (int),(uint8):
result += fmt.Sprintf(`"%s":{"plain":%d}`, channel, something)
case (*cdeque):
fmt.Printf("%v", something)
if something.(*cdeque).Len() == 1 {
//fixme right now we can not distinct plain and deviated
result += fmt.Sprintf(`"%s":{"single":[%v]}`, channel, something.(*cdeque).Front())
} else {
result += fmt.Sprintf(`"%s":{"fill":[%v, %v, %v, %v]}`,
channel,
something.(*cdeque).Front(),
something.(*cdeque).Next(),
something.(*cdeque).Next(),
something.(*cdeque).Next(),
)
}
}
return result
}