From c4ba6b83e67c2f21a8f85fa772f4f525f55c717c Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 25 May 2022 17:52:42 -0400 Subject: [PATCH] consistent menus --- entrylist.go | 36 ++++++++++++++++++++++++++++++++++++ mainscreen.go | 8 +++++--- simulator/player.go | 9 ++++++--- 3 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 entrylist.go diff --git a/entrylist.go b/entrylist.go new file mode 100644 index 0000000..9d96ffa --- /dev/null +++ b/entrylist.go @@ -0,0 +1,36 @@ +package main + +import sim "git.saintnet.tech/stryan/spacetea/simulator" + +type entrylist []sim.ItemEntry + +// Len is the number of elements in the collection. +func (e entrylist) Len() int { + return len(e) +} + +// Less reports whether the element with index i +// must sort before the element with index j. +// +// If both Less(i, j) and Less(j, i) are false, +// then the elements at index i and j are considered equal. +// Sort may place equal elements in any order in the final result, +// while Stable preserves the original input order of equal elements. +// +// Less must describe a transitive ordering: +// - if both Less(i, j) and Less(j, k) are true, then Less(i, k) must be true as well. +// - if both Less(i, j) and Less(j, k) are false, then Less(i, k) must be false as well. +// +// Note that floating-point comparison (the < operator on float32 or float64 values) +// is not a transitive ordering when not-a-number (NaN) values are involved. +// See Float64Slice.Less for a correct implementation for floating-point values. +func (e entrylist) Less(i int, j int) bool { + return e[i].ID() < e[j].ID() +} + +// Swap swaps the elements with indexes i and j. +func (e entrylist) Swap(i int, j int) { + tmp := e[i] + e[i] = e[j] + e[j] = tmp +} diff --git a/mainscreen.go b/mainscreen.go index 0281221..0b1fe5e 100644 --- a/mainscreen.go +++ b/mainscreen.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "sort" "strconv" "time" @@ -103,23 +104,24 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case "g": m.s.Input("get") case "p": - var res []sim.ItemEntry + var res entrylist for _, k := range sim.GlobalItems { if m.s.Player.Resources[k.ID()] != 0 { res = append(res, k.(sim.ItemEntry)) } } + sort.Sort(res) return newMenuModel(res, placeMenu), nil case ",": m.s.Input("pickup") case "x": m.s.Input("destroy") case "c": - var res []sim.ItemEntry + var res entrylist for k := range m.s.Player.Craftables { res = append(res, sim.GlobalItems[k].(sim.ItemEntry)) } - + sort.Sort(res) return newMenuModel(res, craftMenu), nil } return m, nil diff --git a/simulator/player.go b/simulator/player.go index 0e2be25..c3814c3 100644 --- a/simulator/player.go +++ b/simulator/player.go @@ -104,7 +104,7 @@ func (p *Player) research() { func (p *Player) Announce(msg string) { p.logIndex++ p.log = append(p.log, strconv.Itoa(p.logIndex)+" "+msg) - if len(p.log) > 3 { + if len(p.log) > 4 { p.log = p.log[1:] } } @@ -112,8 +112,11 @@ func (p *Player) Announce(msg string) { //Log returns the player log func (p *Player) Log() string { res := "Log:\n" - for _, v := range p.log { - res += v + "\n" + for i, v := range p.log { + res += v + if i < 3 { + res += "\n" + } } return res }