Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

config.go 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package botserv
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "io/ioutil"
  7. "log"
  8. "os"
  9. "os/user"
  10. "strings"
  11. )
  12. type Config struct {
  13. Tick int `json:"tick"` // ms
  14. Timescale float32 `json:"timescale"`
  15. Width int `json:"width"`
  16. Height int `json:"height"`
  17. Obstacles int `json:"obstacles"`
  18. MaxPoints int `json:"max_points"`
  19. Mode string `json:"mode"`
  20. }
  21. const (
  22. TICK = 60
  23. TIMESCALE = 1.0
  24. WIDTH = 800
  25. HEIGHT = 550
  26. OBSTACLES = 5
  27. MAX_POINTS = 500 // allowing for 50 pts in every category
  28. DEFAULT_MODE = "deathmatch"
  29. )
  30. func LoadConfig(filename string) (Config, error) {
  31. c := Config{
  32. Tick: TICK,
  33. Timescale: TIMESCALE,
  34. Width: WIDTH,
  35. Height: HEIGHT,
  36. Obstacles: OBSTACLES,
  37. MaxPoints: MAX_POINTS,
  38. Mode: DEFAULT_MODE,
  39. }
  40. u, err := user.Current()
  41. if err != nil {
  42. return c, err
  43. }
  44. if len(filename) > 1 && filename[:2] == "~/" {
  45. filename = strings.Replace(filename, "~", u.HomeDir, 1)
  46. }
  47. if _, err := os.Stat(filename); os.IsNotExist(err) {
  48. log.Printf("%+v not found, using defaults", filename)
  49. } else {
  50. log.Printf("found config file: %s", filename)
  51. f, err := ioutil.ReadFile(filename)
  52. if err != nil {
  53. return c, err
  54. }
  55. err = json.Unmarshal(f, &c)
  56. if err != nil {
  57. return c, errors.New(fmt.Sprintf("config parse error: %s", err))
  58. }
  59. }
  60. log.Printf("final config: %+v", c)
  61. return c, nil
  62. }