mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-10-31 16:27:18 -04:00
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
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
|
|
}
|
|
|
|
|