85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
|
package KFConfig
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"io"
|
||
|
"io/fs"
|
||
|
"os"
|
||
|
|
||
|
"g.r-io.lu/shynd/kemoforge/pkg/KFData/KFError"
|
||
|
)
|
||
|
|
||
|
// Game is the config for the currently running game if any
|
||
|
var Game = NewBlankConfig()
|
||
|
|
||
|
// KFConfig is the struct that holds all the information about a config
|
||
|
type KFConfig struct {
|
||
|
// Name of the project
|
||
|
Name string `json:"Name"`
|
||
|
// Author of the project
|
||
|
Author string `json:"Author"`
|
||
|
// Version of the project
|
||
|
Version string `json:"Version"`
|
||
|
// Credits for the project
|
||
|
Credits string `json:"Credits"`
|
||
|
// Webpage for the project
|
||
|
Webpage string `json:"Webpage"`
|
||
|
// Icon for the project
|
||
|
Icon string `json:"Icon"`
|
||
|
// EncryptionKey for the project
|
||
|
EncryptionKey string `json:"EncryptionKey"`
|
||
|
}
|
||
|
|
||
|
// NewConfig creates a new config with given name, author, version and credits
|
||
|
func NewConfig(name, version, author, credits string) *KFConfig {
|
||
|
return &KFConfig{
|
||
|
Name: name,
|
||
|
Version: version,
|
||
|
Author: author,
|
||
|
Credits: credits,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// NewBlankConfig creates a new blank config
|
||
|
func NewBlankConfig() *KFConfig {
|
||
|
return &KFConfig{}
|
||
|
}
|
||
|
|
||
|
// Load loads the config from the given file
|
||
|
func (c *KFConfig) Load(file fs.File) error {
|
||
|
defer file.Close()
|
||
|
|
||
|
// read the file
|
||
|
data, err := io.ReadAll(file)
|
||
|
if err != nil {
|
||
|
return KFError.NewErrConfigLoad(err.Error())
|
||
|
}
|
||
|
|
||
|
// unmarshal the data
|
||
|
err = json.Unmarshal(data, c)
|
||
|
if err != nil {
|
||
|
return KFError.NewErrConfigLoad(err.Error())
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Save saves the config to the given file
|
||
|
//
|
||
|
// this is an editor only function and should not be used in the final game
|
||
|
func (c *KFConfig) Save(path string) error {
|
||
|
//Marshal the data
|
||
|
data, err := json.MarshalIndent(c, "", " ")
|
||
|
if err != nil {
|
||
|
return KFError.NewErrConfigSave(err.Error())
|
||
|
}
|
||
|
|
||
|
//Write the data to the file
|
||
|
err = os.WriteFile(path, data, os.ModePerm)
|
||
|
if err != nil {
|
||
|
return KFError.NewErrConfigSave(err.Error())
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|