75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
|
package flow
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
type driverName string
|
||
|
|
||
|
const (
|
||
|
// Names of all the drivers
|
||
|
main driverName = "Main"
|
||
|
levelPly driverName = "LevelPly"
|
||
|
singles driverName = "Singles"
|
||
|
randomMap driverName = "RandomMap"
|
||
|
newGame driverName = "NewGame"
|
||
|
loadGame driverName = "LoadGame"
|
||
|
options driverName = "Options"
|
||
|
kbd driverName = "Keyboard"
|
||
|
bridge driverName = "Bridge"
|
||
|
briefing driverName = "Briefing"
|
||
|
choices driverName = "Choices"
|
||
|
saveGame driverName = "SaveGame"
|
||
|
credits driverName = "Credits"
|
||
|
arrange driverName = "Arrange"
|
||
|
|
||
|
configureUltEquip driverName = "Configure_UltEquip"
|
||
|
configureVehiclesUltra driverName = "Configure_Vehicles_Ultra"
|
||
|
|
||
|
mainGame driverName = "MainGame"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
driverNames = []driverName{
|
||
|
main, levelPly, singles, randomMap, newGame, loadGame, options, kbd,
|
||
|
bridge, briefing, choices, saveGame, credits, arrange,
|
||
|
configureUltEquip, configureVehiclesUltra,
|
||
|
mainGame,
|
||
|
}
|
||
|
)
|
||
|
|
||
|
// from is the child menu, to is the parent
|
||
|
func (f *Flow) returnToLastDriverNow(from driverName) error {
|
||
|
to, ok := f.returns[from]
|
||
|
if !ok {
|
||
|
return fmt.Errorf("Couldn't work out where to return to from %v", from)
|
||
|
}
|
||
|
|
||
|
delete(f.returns, from)
|
||
|
|
||
|
f.setDriverNow(to)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (f *Flow) setDriver(name driverName) func() {
|
||
|
return func() {
|
||
|
f.setDriverNow(name)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (f *Flow) setDriverNow(name driverName) {
|
||
|
f.current = f.drivers[name]
|
||
|
}
|
||
|
|
||
|
// from is the parent menu, to is the child
|
||
|
func (f *Flow) setReturningDriver(from, to driverName) func() {
|
||
|
return func() {
|
||
|
f.setReturningDriverNow(from, to)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (f *Flow) setReturningDriverNow(from, to driverName) {
|
||
|
f.returns[to] = from
|
||
|
f.setDriverNow(to)
|
||
|
}
|