have wire guy respond to email

pull/1/head
vilmibm 2023-03-10 06:22:23 +00:00
parent 3d877ea184
commit 2f6164635f
1 changed files with 16 additions and 6 deletions

View File

@ -31,9 +31,10 @@ type scene struct {
SorryMsg string SorryMsg string
Input *bytes.Buffer Input *bytes.Buffer
OnAdvance func(*scene) OnAdvance func(*scene)
OnMsg func(*scene, *tview.TextView, string)
} }
func newScene(name, desc, sorryMsg string, host *character, onAdvance func(*scene)) *scene { func newScene(name, desc, sorryMsg string, host *character, onAdvance func(*scene), onMsg func(*scene, *tview.TextView, string)) *scene {
return &scene{ return &scene{
Name: name, Name: name,
Description: desc, Description: desc,
@ -41,6 +42,7 @@ func newScene(name, desc, sorryMsg string, host *character, onAdvance func(*scen
Host: host, Host: host,
Input: bytes.NewBuffer([]byte{}), Input: bytes.NewBuffer([]byte{}),
OnAdvance: onAdvance, OnAdvance: onAdvance,
OnMsg: onMsg,
} }
} }
@ -200,7 +202,12 @@ func _main(l *log.Logger, db *sql.DB) error {
`), `),
"i'm sorry, before going further could you share an email with me?", "i'm sorry, before going further could you share an email with me?",
newCharacter("wire guy", "a lil homonculus made of discarded computer cables"), newCharacter("wire guy", "a lil homonculus made of discarded computer cables"),
func(s *scene) { su.Email = string(s.Input.Bytes()) }), func(s *scene) { su.Email = string(s.Input.Bytes()) },
func(s *scene, tv *tview.TextView, msg string) {
// TODO could check and see if it's email shaped and admonish if not
trimmed := strings.TrimSpace(msg)
fmt.Fprintln(tv, s.Host.Say(fmt.Sprintf("I heard '%s'. Is that right?", trimmed)))
}),
newScene("how", heredoc.Doc(` newScene("how", heredoc.Doc(`
The workshop fades away. You hear the sound of a dial up modem The workshop fades away. You hear the sound of a dial up modem
in the distance. in the distance.
@ -221,7 +228,7 @@ func _main(l *log.Logger, db *sql.DB) error {
`), `),
"phweeturpff", "phweeturpff",
newCharacter("the shrike", "a little grey bird. it has a pretty song."), newCharacter("the shrike", "a little grey bird. it has a pretty song."),
func(s *scene) { su.How = string(s.Input.Bytes()) }), func(s *scene) { su.How = string(s.Input.Bytes()) }, nil),
newScene("what", heredoc.Doc(` newScene("what", heredoc.Doc(`
You sink down into soft mossy floor of the forest. You find yourself floating in darkness. You sink down into soft mossy floor of the forest. You find yourself floating in darkness.
@ -237,7 +244,7 @@ func _main(l *log.Logger, db *sql.DB) error {
`), `),
"hmm did you say something?", "hmm did you say something?",
newCharacter("the vcr", "a black and grey VCR from 1991"), newCharacter("the vcr", "a black and grey VCR from 1991"),
func(s *scene) { su.Why = string(s.Input.Bytes()) }), func(s *scene) { su.Why = string(s.Input.Bytes()) }, nil),
newScene("link", heredoc.Doc(` newScene("link", heredoc.Doc(`
You realize your eyes have been shut. You open them and, in an instant, You realize your eyes have been shut. You open them and, in an instant,
the neon grid and polygons are gone. You're in a convenience store. Outside the neon grid and polygons are gone. You're in a convenience store. Outside
@ -258,7 +265,7 @@ func _main(l *log.Logger, db *sql.DB) error {
`), `),
"just the one last thing please", "just the one last thing please",
newCharacter("the mop", "a greying mop with a wooden handle."), newCharacter("the mop", "a greying mop with a wooden handle."),
func(s *scene) { su.Links = string(s.Input.Bytes()) }), func(s *scene) { su.Links = string(s.Input.Bytes()) }, nil),
newScene("done", heredoc.Doc(` newScene("done", heredoc.Doc(`
thank you for applying to tilde.town! thank you for applying to tilde.town!
@ -274,7 +281,7 @@ func _main(l *log.Logger, db *sql.DB) error {
`), `),
"", "",
newCharacter("the æther", "the very air around you"), newCharacter("the æther", "the very air around you"),
nil), nil, nil),
} }
sm := newSceneManager(msgScroll, scenes) sm := newSceneManager(msgScroll, scenes)
@ -321,6 +328,9 @@ func _main(l *log.Logger, db *sql.DB) error {
} }
fmt.Fprintln(msgScroll, player.Say(msg)) fmt.Fprintln(msgScroll, player.Say(msg))
fmt.Fprintln(sm.Current.Input, msg) fmt.Fprintln(sm.Current.Input, msg)
if sm.Current.OnMsg != nil {
sm.Current.OnMsg(sm.Current, msgScroll, msg)
}
msgScroll.ScrollToEnd() msgScroll.ScrollToEnd()
} }