diff --git a/farm/farm.go b/farm/farm.go index 232a21e..7b6247e 100644 --- a/farm/farm.go +++ b/farm/farm.go @@ -4,11 +4,10 @@ import ( "encoding/json" "errors" "fmt" - "os" "time" ) -const startingMoney = 50 +const startingMoney = 5000 type Farm struct { name string @@ -33,12 +32,7 @@ func New(name string, w, h int, scale time.Duration) *Farm { } } -func Load(filename string) (*Farm, error) { - data, err := os.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("error opening file: %w", err) - } - +func Load(data []byte) (*Farm, error) { decrypted, err := decrypt(data) if err != nil { return nil, fmt.Errorf("error decrypting: %w", err) diff --git a/game/filesystem.go b/game/filesystem.go index ab8e0a1..d806e34 100644 --- a/game/filesystem.go +++ b/game/filesystem.go @@ -4,7 +4,6 @@ import ( "fmt" "os" "path/filepath" - "strings" tea "github.com/charmbracelet/bubbletea" ) @@ -46,16 +45,6 @@ func terminalTillerDir() (string, error) { return dir, nil } -func (g *game) filePath() (string, error) { - dir, err := terminalTillerDir() - if err != nil { - return "", err - } - - fname := strings.ToLower(strings.ReplaceAll(g.farm.Name(), " ", "_")) - return filepath.Join(dir, fname+".data"), nil -} - func (g *game) saveAndQuit() tea.Msg { data, err := g.farm.Marshal() if err != nil { @@ -63,12 +52,7 @@ func (g *game) saveAndQuit() tea.Msg { panic(fmt.Sprintf("MARSHAL Error: %v", err)) } - path, err := g.filePath() - if err != nil { - panic(fmt.Sprintf("GET DIR Error: %v", err)) - } - - err = os.WriteFile(path, data, 0644) + err = os.WriteFile(g.filename, data, 0644) if err != nil { panic(fmt.Sprintf("WRITE Error: %v", err)) } diff --git a/game/game.go b/game/game.go index cb3c6fa..639f745 100644 --- a/game/game.go +++ b/game/game.go @@ -1,6 +1,9 @@ package game import ( + "fmt" + "os" + "path/filepath" "time" "github.com/calvinmclean/terminal-tiller/farm" @@ -15,7 +18,7 @@ const ( DEFAULT_WIDTH = 7 DEFAULT_HEIGHT = 7 DEFAULT_SCALE = time.Minute - DEFAULT_FILENAME = "farm.data" + DEFAULT_FILENAME = "my_farm.data" helpStr = `h/j/k/l or ←↓↑→ to move enter or space to start a selection @@ -39,23 +42,46 @@ type game struct { showSeedSelect bool seedSelect list.Model + + filename string } -func New() tea.Model { - saveFiles, err := findSaveFiles() +func New(filename, farmName string) (tea.Model, error) { + if filename == "" { + saveFiles, err := findSaveFiles() + if err != nil { + panic("error finding save files " + err.Error()) + } + + if len(saveFiles) > 0 { + filename = saveFiles[0] + } + } + + dir, err := terminalTillerDir() if err != nil { - panic("error finding save files " + err.Error()) + return nil, fmt.Errorf("error determining save file directory: %w", err) } - // TODO: select from list of save files if len > 1 and ask for name var f *farm.Farm - if len(saveFiles) == 0 { + switch { + case filename == "" && farmName != "": + return nil, fmt.Errorf("cannot create new farm without filename") + case filename == "" && farmName == "": // create new farm with default name + filename = filepath.Join(dir, DEFAULT_FILENAME) f = farm.New("My Farm", DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_SCALE) - } else { - f, err = farm.Load(saveFiles[0]) + case filename != "" && farmName == "": // load existing + data, err := os.ReadFile(filename) if err != nil { - panic("error loading from save file " + err.Error()) + return nil, fmt.Errorf("error opening file: %w", err) } + + f, err = farm.Load(data) + if err != nil { + return nil, fmt.Errorf("error loading from save file: %w", err) + } + case filename != "" && farmName != "": // new with name + f = farm.New(farmName, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_SCALE) } return &game{ @@ -64,7 +90,8 @@ func New() tea.Model { selectedCoord: coord{-1, -1}, seedSelect: newSeedSelectView(f.TimeScale()), selectedCropType: farm.Lettuce, - } + filename: filename, + }, nil } func (g *game) Init() tea.Cmd { diff --git a/main.go b/main.go index 766e97d..ea81085 100644 --- a/main.go +++ b/main.go @@ -1,16 +1,26 @@ package main import ( + "flag" + "github.com/calvinmclean/terminal-tiller/game" tea "github.com/charmbracelet/bubbletea" ) func main() { - g := game.New() + filename := flag.String("file", "", "save file to load from") + farmName := flag.String("name", "", "use this flag to create new farm with the provided name. filename is required when creating a new farm") + flag.Parse() + + g, err := game.New(*filename, *farmName) + if err != nil { + panic(err) + } + p := tea.NewProgram(g, tea.WithAltScreen()) - _, err := p.Run() + _, err = p.Run() if err != nil { panic(err) } diff --git a/screenshot.png b/screenshot.png index 7150d66..721a1b6 100644 Binary files a/screenshot.png and b/screenshot.png differ