server/config.go

67 lines
1.4 KiB
Go
Raw Normal View History

2013-11-13 20:38:57 -08:00
package main
import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"log"
"os"
"os/user"
"strings"
)
type Config struct {
Tick int `json:"tick"` // ms
Timescale float32 `json:"timescale"`
Width int `json:"width"`
Height int `json:"height"`
Obstacles int `json:"obstacles"`
2013-11-29 00:10:49 -08:00
MaxPoints int `json:"max_points"`
Mode string `json:"mode"`
2013-11-13 20:38:57 -08:00
}
const (
TICK = 60
TIMESCALE = 1.0
WIDTH = 800
HEIGHT = 550
OBSTACLES = 5
MAX_POINTS = 500 // allowing for 50 pts in every category
DEFAULT_MODE = "deathmatch"
2013-11-13 20:38:57 -08:00
)
func loadConfig(filename string) (Config, error) {
2013-11-29 00:10:49 -08:00
c := Config{
Tick: TICK,
Timescale: TIMESCALE,
Width: WIDTH,
Height: HEIGHT,
Obstacles: OBSTACLES,
MaxPoints: MAX_POINTS,
Mode: DEFAULT_MODE,
2013-11-29 00:10:49 -08:00
}
2013-11-13 20:38:57 -08:00
u, err := user.Current()
if err != nil {
return c, err
}
if len(filename) > 1 && filename[:2] == "~/" {
filename = strings.Replace(filename, "~", u.HomeDir, 1)
}
if _, err := os.Stat(filename); os.IsNotExist(err) {
log.Printf("%+v not found, using defaults", filename)
} else {
log.Printf("found config file: %s", filename)
f, err := ioutil.ReadFile(filename)
if err != nil {
return c, err
}
err = json.Unmarshal(f, &c)
if err != nil {
return c, errors.New(fmt.Sprintf("config parse error: %s", err))
}
}
2013-11-29 00:10:49 -08:00
log.Printf("final config: %+v", c)
2013-11-13 20:38:57 -08:00
return c, nil
}