1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-11-06 18:27:20 -05:00
OpenDiablo2/d2corecommon/configuration.go

67 lines
1.5 KiB
Go
Raw Normal View History

package d2corecommon
import (
"encoding/json"
"io/ioutil"
"log"
"os"
"path"
"runtime"
"strings"
"github.com/mitchellh/go-homedir"
)
// Configuration defines the configuration for the engine, loaded from config.json
type Configuration struct {
Language string
FullScreen bool
Scale float64
RunInBackground bool
TicksPerSecond int
FpsCap int
VsyncEnabled bool
MpqPath string
MpqLoadOrder []string
MpqMacLoadOrder []string
SfxVolume float64
BgmVolume float64
}
// ConfigBasePath is used for tests to find the base config json file
var ConfigBasePath = "./"
func LoadConfiguration() *Configuration {
configJSON, err := ioutil.ReadFile(path.Join(ConfigBasePath, "config.json"))
if err != nil {
log.Fatal(err)
}
var config Configuration
err = json.Unmarshal(configJSON, &config)
if err != nil {
log.Fatal(err)
}
if runtime.GOOS == "darwin" {
if config.MpqPath[0] != '/' {
config.MpqPath = "/Applications/Diablo II/"
}
config.MpqLoadOrder = config.MpqMacLoadOrder
} else {
// Path fixup for wine-installed diablo 2 in linux
if config.MpqPath[0] != '/' {
if _, err := os.Stat(config.MpqPath); os.IsNotExist(err) {
homeDir, _ := homedir.Dir()
newPath := strings.ReplaceAll(config.MpqPath, `C:\`, homeDir+"/.wine/drive_c/")
newPath = strings.ReplaceAll(newPath, "C:/", homeDir+"/.wine/drive_c/")
newPath = strings.ReplaceAll(newPath, `\`, "/")
if _, err := os.Stat(newPath); !os.IsNotExist(err) {
config.MpqPath = newPath
}
}
}
}
return &config
}