forked from tildetown/town
refactor stuff
parent
336622ca62
commit
4a881d3b8b
|
@ -33,9 +33,10 @@ in /etc/pam.d/sshd
|
||||||
const maxInputLength int = 4000
|
const maxInputLength int = 4000
|
||||||
|
|
||||||
type TownApplication struct {
|
type TownApplication struct {
|
||||||
Email string
|
Email string
|
||||||
|
HowFound string
|
||||||
// TODO
|
Why string
|
||||||
|
Where string
|
||||||
}
|
}
|
||||||
|
|
||||||
type streams struct {
|
type streams struct {
|
||||||
|
@ -97,26 +98,17 @@ func cli(s *streams) error {
|
||||||
|
|
||||||
player := newCharacter("you", "TODO")
|
player := newCharacter("you", "TODO")
|
||||||
|
|
||||||
currentScene := "start"
|
|
||||||
|
|
||||||
sceneTransition := func(text string) {
|
|
||||||
fmt.Fprintln(msgScroll, heredoc.Doc(`
|
|
||||||
|
|
||||||
[purple]----------[-:-:-]
|
|
||||||
|
|
||||||
`))
|
|
||||||
fmt.Fprintln(msgScroll, text)
|
|
||||||
}
|
|
||||||
|
|
||||||
type scene struct {
|
type scene struct {
|
||||||
|
Name string
|
||||||
Description string
|
Description string
|
||||||
InBuff io.ReadWriter
|
InBuff io.ReadWriter
|
||||||
InLength int
|
InLength int
|
||||||
Host *character
|
Host *character
|
||||||
}
|
}
|
||||||
|
|
||||||
scenes := map[string]*scene{
|
scenes := []*scene{
|
||||||
"start": {
|
{
|
||||||
|
Name: "start",
|
||||||
Description: heredoc.Doc(`
|
Description: heredoc.Doc(`
|
||||||
You open your eyes.
|
You open your eyes.
|
||||||
|
|
||||||
|
@ -136,7 +128,8 @@ func cli(s *streams) error {
|
||||||
Host: newCharacter("wire guy", "a lil homonculus made of discarded computer cables"),
|
Host: newCharacter("wire guy", "a lil homonculus made of discarded computer cables"),
|
||||||
InBuff: bytes.NewBuffer([]byte{}),
|
InBuff: bytes.NewBuffer([]byte{}),
|
||||||
},
|
},
|
||||||
"nodded": {
|
{
|
||||||
|
Name: "nodded",
|
||||||
Description: heredoc.Doc(`
|
Description: 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.
|
||||||
|
@ -158,7 +151,8 @@ func cli(s *streams) error {
|
||||||
InBuff: bytes.NewBuffer([]byte{}),
|
InBuff: bytes.NewBuffer([]byte{}),
|
||||||
Host: newCharacter("the shrike", "a little grey bird. it has a pretty song."),
|
Host: newCharacter("the shrike", "a little grey bird. it has a pretty song."),
|
||||||
},
|
},
|
||||||
"leaned": {
|
{
|
||||||
|
Name: "leaned",
|
||||||
Description: heredoc.Doc(`
|
Description: heredoc.Doc(`
|
||||||
You sink backwards into the forest. You find yourself floating in darkness.
|
You sink backwards into the forest. You find yourself floating in darkness.
|
||||||
|
|
||||||
|
@ -176,7 +170,8 @@ func cli(s *streams) error {
|
||||||
InBuff: bytes.NewBuffer([]byte{}),
|
InBuff: bytes.NewBuffer([]byte{}),
|
||||||
Host: newCharacter("the vcr", "a black and grey VCR from 1991"),
|
Host: newCharacter("the vcr", "a black and grey VCR from 1991"),
|
||||||
},
|
},
|
||||||
"spun": {
|
{
|
||||||
|
Name: "spun",
|
||||||
Description: heredoc.Doc(`
|
Description: 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
|
||||||
|
@ -199,7 +194,8 @@ func cli(s *streams) error {
|
||||||
InBuff: bytes.NewBuffer([]byte{}),
|
InBuff: bytes.NewBuffer([]byte{}),
|
||||||
Host: newCharacter("the mop", "a greying mop with a wooden handle."),
|
Host: newCharacter("the mop", "a greying mop with a wooden handle."),
|
||||||
},
|
},
|
||||||
"done": {
|
{
|
||||||
|
Name: "spun",
|
||||||
Description: heredoc.Doc(`
|
Description: heredoc.Doc(`
|
||||||
thank you for applying to tilde.town!
|
thank you for applying to tilde.town!
|
||||||
|
|
||||||
|
@ -213,6 +209,27 @@ func cli(s *streams) error {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sceneIx := 0
|
||||||
|
currentScene := scenes[sceneIx]
|
||||||
|
|
||||||
|
advanceScene := func(fromScene, sorryMsg string) {
|
||||||
|
if currentScene.Name != fromScene {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if currentScene.InLength == 0 {
|
||||||
|
fmt.Fprintln(msgScroll, currentScene.Host.Say(sorryMsg))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
sceneIx++
|
||||||
|
currentScene = scenes[sceneIx]
|
||||||
|
fmt.Fprintln(msgScroll, heredoc.Doc(`
|
||||||
|
|
||||||
|
[purple]----------[-:-:-]
|
||||||
|
|
||||||
|
`))
|
||||||
|
fmt.Fprintln(msgScroll, currentScene.Description)
|
||||||
|
}
|
||||||
|
|
||||||
handleInput := func(msg string) {
|
handleInput := func(msg string) {
|
||||||
trimmed := strings.TrimSpace(msg)
|
trimmed := strings.TrimSpace(msg)
|
||||||
if trimmed == "" {
|
if trimmed == "" {
|
||||||
|
@ -228,58 +245,23 @@ func cli(s *streams) error {
|
||||||
app.Stop()
|
app.Stop()
|
||||||
case "look":
|
case "look":
|
||||||
fmt.Fprintln(msgScroll, "")
|
fmt.Fprintln(msgScroll, "")
|
||||||
fmt.Fprintln(msgScroll, scenes[currentScene].Description)
|
fmt.Fprintln(msgScroll, currentScene.Description)
|
||||||
// TODO refactor into a state machine
|
// TODO refactor into a state machine
|
||||||
case "nod":
|
case "nod":
|
||||||
if currentScene != "start" {
|
advanceScene("start",
|
||||||
return
|
"i'm sorry, before going further could you share an email with me?")
|
||||||
}
|
|
||||||
if scenes[currentScene].InLength == 0 {
|
|
||||||
fmt.Fprintln(msgScroll,
|
|
||||||
scenes[currentScene].Host.Say("i'm sorry, before going further could you share an email with me?"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
currentScene = "nodded"
|
|
||||||
sceneTransition(scenes[currentScene].Description)
|
|
||||||
case "lean":
|
case "lean":
|
||||||
if currentScene != "nodded" {
|
advanceScene("nodded", "phweeturpff")
|
||||||
return
|
|
||||||
}
|
|
||||||
if scenes[currentScene].InLength == 0 {
|
|
||||||
fmt.Fprintln(msgScroll,
|
|
||||||
scenes[currentScene].Host.Say("phweeturpff"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
currentScene = "leaned"
|
|
||||||
sceneTransition(scenes[currentScene].Description)
|
|
||||||
case "spin":
|
case "spin":
|
||||||
if currentScene != "leaned" {
|
advanceScene("leaned", "hmm did you say something?")
|
||||||
return
|
|
||||||
}
|
|
||||||
if scenes[currentScene].InLength == 0 {
|
|
||||||
fmt.Fprintln(msgScroll,
|
|
||||||
scenes[currentScene].Host.Say("hmm did you say something?"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
currentScene = "spun"
|
|
||||||
sceneTransition(scenes[currentScene].Description)
|
|
||||||
case "open":
|
case "open":
|
||||||
if currentScene != "spun" {
|
advanceScene("spun", "just the one last thing please")
|
||||||
return
|
|
||||||
}
|
|
||||||
if scenes[currentScene].InLength == 0 {
|
|
||||||
fmt.Fprintln(msgScroll,
|
|
||||||
scenes[currentScene].Host.Say("just the one last thing please"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
currentScene = "done"
|
|
||||||
sceneTransition(scenes[currentScene].Description)
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fmt.Fprintln(msgScroll, player.Say(msg))
|
fmt.Fprintln(msgScroll, player.Say(msg))
|
||||||
fmt.Fprintln(scenes[currentScene].InBuff, msg)
|
fmt.Fprintln(currentScene.InBuff, msg)
|
||||||
scenes[currentScene].InLength += len(msg)
|
currentScene.InLength += len(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
|
app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
|
||||||
|
@ -294,7 +276,7 @@ func cli(s *streams) error {
|
||||||
})
|
})
|
||||||
|
|
||||||
app.SetAfterDrawFunc(func(_ tcell.Screen) {
|
app.SetAfterDrawFunc(func(_ tcell.Screen) {
|
||||||
fmt.Fprintln(msgScroll, scenes[currentScene].Description)
|
fmt.Fprintln(msgScroll, currentScene.Description)
|
||||||
app.SetAfterDrawFunc(nil)
|
app.SetAfterDrawFunc(nil)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue