Skip to content

Commit

Permalink
Allow selecting different save file and farm name
Browse files Browse the repository at this point in the history
  • Loading branch information
calvinmclean committed Jan 23, 2024
1 parent d07317a commit 8a819a5
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 37 deletions.
10 changes: 2 additions & 8 deletions farm/farm.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@ import (
"encoding/json"
"errors"
"fmt"
"os"
"time"
)

const startingMoney = 50
const startingMoney = 5000

type Farm struct {
name string
Expand All @@ -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)
Expand Down
18 changes: 1 addition & 17 deletions game/filesystem.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"os"
"path/filepath"
"strings"

tea "github.com/charmbracelet/bubbletea"
)
Expand Down Expand Up @@ -46,29 +45,14 @@ 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 {
// TODO: how to handle errors in bubbletea???
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))
}
Expand Down
47 changes: 37 additions & 10 deletions game/game.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package game

import (
"fmt"
"os"
"path/filepath"
"time"

"github.com/calvinmclean/terminal-tiller/farm"
Expand All @@ -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
Expand All @@ -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{
Expand All @@ -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 {
Expand Down
14 changes: 12 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
@@ -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)
}
Expand Down
Binary file modified screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 8a819a5

Please sign in to comment.