Better commenting throughout

This commit is contained in:
2025-11-24 12:29:19 -07:00
parent 175479da69
commit 5e0413a259
14 changed files with 107 additions and 195 deletions

View File

@@ -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
}