Better commenting throughout
This commit is contained in:
@@ -9,47 +9,43 @@ import (
|
||||
"github.com/BurntSushi/toml"
|
||||
)
|
||||
|
||||
// File path for save data.
|
||||
const (
|
||||
dataFile = "data.toml"
|
||||
)
|
||||
|
||||
// Stores all persistent game data in a single file.
|
||||
// Save file structure
|
||||
|
||||
type Data struct {
|
||||
Settings Settings `toml:"settings"`
|
||||
GameState GameState `toml:"game_state"`
|
||||
}
|
||||
|
||||
// Stores user preferences.
|
||||
type Settings struct {
|
||||
FPSMonitor bool `toml:"fps_monitor"`
|
||||
FPSCap string `toml:"fps_cap"` // "60", "120", or "uncapped"
|
||||
FPSCap string `toml:"fps_cap"`
|
||||
}
|
||||
|
||||
// Stores the current game progress.
|
||||
type GameState struct {
|
||||
HasSave bool `toml:"has_save"`
|
||||
SavedAt time.Time `toml:"saved_at"`
|
||||
HeroX float64 `toml:"hero_x"`
|
||||
HeroY float64 `toml:"hero_y"`
|
||||
HeroStamina float64 `toml:"hero_stamina"`
|
||||
PlayTimeMS int64 `toml:"play_time_ms"` // Total play time in milliseconds
|
||||
PlayTimeMS int64 `toml:"play_time_ms"`
|
||||
}
|
||||
|
||||
// Handles saving and loading of settings and game state.
|
||||
// Save manager
|
||||
|
||||
type Manager struct {
|
||||
dataPath string
|
||||
}
|
||||
|
||||
// Creates a new save manager.
|
||||
func NewManager() (*Manager, error) {
|
||||
// Get executable path
|
||||
exePath, err := os.Executable()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get executable path: %w", err)
|
||||
}
|
||||
|
||||
// Get directory containing the executable
|
||||
exeDir := filepath.Dir(exePath)
|
||||
|
||||
return &Manager{
|
||||
@@ -57,11 +53,10 @@ func NewManager() (*Manager, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Loads all data from disk.
|
||||
// Data operations
|
||||
|
||||
func (m *Manager) LoadData() (*Data, error) {
|
||||
// Check if file exists
|
||||
if _, err := os.Stat(m.dataPath); os.IsNotExist(err) {
|
||||
// Return default data
|
||||
return &Data{
|
||||
Settings: Settings{
|
||||
FPSMonitor: false,
|
||||
@@ -81,7 +76,6 @@ func (m *Manager) LoadData() (*Data, error) {
|
||||
return &data, nil
|
||||
}
|
||||
|
||||
// Writes all data to disk.
|
||||
func (m *Manager) SaveData(data *Data) error {
|
||||
file, err := os.Create(m.dataPath)
|
||||
if err != nil {
|
||||
@@ -97,7 +91,8 @@ func (m *Manager) SaveData(data *Data) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Loads user settings from disk.
|
||||
// Settings operations
|
||||
|
||||
func (m *Manager) LoadSettings() (*Settings, error) {
|
||||
data, err := m.LoadData()
|
||||
if err != nil {
|
||||
@@ -106,11 +101,9 @@ func (m *Manager) LoadSettings() (*Settings, error) {
|
||||
return &data.Settings, nil
|
||||
}
|
||||
|
||||
// Writes user settings to disk.
|
||||
func (m *Manager) SaveSettings(settings *Settings) error {
|
||||
data, err := m.LoadData()
|
||||
if err != nil {
|
||||
// If load fails, create new data with these settings
|
||||
data = &Data{
|
||||
Settings: *settings,
|
||||
GameState: GameState{
|
||||
@@ -124,7 +117,8 @@ func (m *Manager) SaveSettings(settings *Settings) error {
|
||||
return m.SaveData(data)
|
||||
}
|
||||
|
||||
// Loads game state from disk.
|
||||
// Game state operations
|
||||
|
||||
func (m *Manager) LoadGameState() (*GameState, error) {
|
||||
data, err := m.LoadData()
|
||||
if err != nil {
|
||||
@@ -132,17 +126,15 @@ func (m *Manager) LoadGameState() (*GameState, error) {
|
||||
}
|
||||
|
||||
if !data.GameState.HasSave {
|
||||
return nil, nil // No save exists
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return &data.GameState, nil
|
||||
}
|
||||
|
||||
// Writes game state to disk.
|
||||
func (m *Manager) SaveGameState(state *GameState) error {
|
||||
data, err := m.LoadData()
|
||||
if err != nil {
|
||||
// If load fails, create new data with this game state
|
||||
data = &Data{
|
||||
Settings: Settings{
|
||||
FPSMonitor: false,
|
||||
@@ -160,7 +152,6 @@ func (m *Manager) SaveGameState(state *GameState) error {
|
||||
return m.SaveData(data)
|
||||
}
|
||||
|
||||
// Checks if a saved game exists.
|
||||
func (m *Manager) HasSavedGame() bool {
|
||||
data, err := m.LoadData()
|
||||
if err != nil {
|
||||
@@ -169,7 +160,6 @@ func (m *Manager) HasSavedGame() bool {
|
||||
return data.GameState.HasSave
|
||||
}
|
||||
|
||||
// Removes the saved game.
|
||||
func (m *Manager) DeleteGameState() error {
|
||||
data, err := m.LoadData()
|
||||
if err != nil {
|
||||
@@ -183,7 +173,8 @@ func (m *Manager) DeleteGameState() error {
|
||||
return m.SaveData(data)
|
||||
}
|
||||
|
||||
// Returns the path to the save file.
|
||||
// Utilities
|
||||
|
||||
func (m *Manager) GetSaveFilePath() string {
|
||||
return m.dataPath
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user