catalog.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package main
  2. import (
  3. "encoding/json"
  4. "os"
  5. )
  6. type Catalog struct {
  7. Tiles []Tile
  8. }
  9. func (c *Catalog) LoadFile(filename string) error {
  10. pay, err := os.ReadFile(filename)
  11. if err != nil {
  12. return err
  13. }
  14. file := []map[string]any{}
  15. err = json.Unmarshal(pay, &file)
  16. if err != nil {
  17. return err
  18. }
  19. for _, m := range file {
  20. t := TileFromMap(m)
  21. if t == nil {
  22. continue
  23. }
  24. c.Tiles = append(c.Tiles, t)
  25. }
  26. return nil
  27. }
  28. func (c *Catalog) FindByName(name string) (int, bool) {
  29. for idx, t := range c.Tiles {
  30. if t.Name() == name {
  31. return idx, true
  32. }
  33. }
  34. return 0, false
  35. }
  36. func (c *Catalog) Symbol(idx int) string {
  37. return c.Tiles[idx].Symbol()
  38. }
  39. func (c *Catalog) Color(idx int) string {
  40. return c.Tiles[idx].Color()
  41. }
  42. func (c *Catalog) Next(idx int) {
  43. c.Tiles[idx].Next()
  44. }
  45. func (c *Catalog) MakeTemplate(filename string) error {
  46. pay, err := json.MarshalIndent([]map[string]any{
  47. {
  48. "name": "template",
  49. "symbol": "0",
  50. "color": "BRI BRO ON BLA",
  51. },
  52. {
  53. "name": "animated-template",
  54. "symbols": []string{
  55. "1",
  56. "2",
  57. "3",
  58. },
  59. "colors": []string{
  60. "BRI RED ON BLA",
  61. "BRI GRE ON BLA",
  62. "BRI CYA ON BLA",
  63. },
  64. },
  65. }, "", " ")
  66. if err != nil {
  67. return err
  68. }
  69. err = os.WriteFile(filename, pay, 0666)
  70. return err
  71. }