Display MainGame.mnu and map in ordoor simultaneously
It's a complete mess for now - many things are out of place or shown when they shouldn't be - and we can't move around the game map. But, it's a good start.
This commit is contained in:
@@ -4,15 +4,16 @@ func (f *Flow) linkBridge() {
|
||||
// FIXME: sometimes these doors are frozen, depending on ship state, but we
|
||||
// don't implement that yet.
|
||||
|
||||
f.onClick(bridge, "2.1", f.setDriver(briefing)) // Mission briefing clickable
|
||||
f.onClick(bridge, "2.2", f.setDriver(choices)) // Options door hotspot
|
||||
f.onClick(bridge, "2.4", f.playNextScenario()) // Enter combat door hotspot
|
||||
f.setFreeze(bridge, "2.6", true) // TODO: Vehicle configure door hotspot
|
||||
f.onClick(bridge, "2.8", f.setDriver(arrange)) // Squads configure door hotspot
|
||||
f.onClick(bridge, "2.1", f.setDriver(briefing)) // Mission briefing clickable
|
||||
f.onClick(bridge, "2.2", f.setDriver(choices)) // Options door hotspot
|
||||
f.onClick(bridge, "2.4", f.playNextScenario(bridge)) // Enter combat door hotspot
|
||||
f.setFreeze(bridge, "2.6", true) // TODO: Vehicle configure door hotspot
|
||||
f.onClick(bridge, "2.8", f.setDriver(arrange)) // Squads configure door hotspot
|
||||
|
||||
// link children
|
||||
f.linkBriefing()
|
||||
f.linkChoices()
|
||||
f.linkMainGame()
|
||||
f.linkArrange()
|
||||
}
|
||||
|
||||
|
74
internal/flow/drivers.go
Normal file
74
internal/flow/drivers.go
Normal file
@@ -0,0 +1,74 @@
|
||||
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)
|
||||
}
|
@@ -40,38 +40,9 @@ type Flow struct {
|
||||
exit error
|
||||
}
|
||||
|
||||
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"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrExit = errors.New("exiting gracefully")
|
||||
|
||||
driverNames = []driverName{
|
||||
main, levelPly, singles, randomMap, newGame, loadGame, options, kbd,
|
||||
bridge, briefing, choices, saveGame, credits, arrange,
|
||||
configureUltEquip, configureVehiclesUltra,
|
||||
}
|
||||
|
||||
// Constants used for sliders
|
||||
|
||||
h3Slider = map[int]int{1: 8, 2: 56, 3: 110, 4: 120}
|
||||
@@ -245,25 +216,7 @@ func (f *Flow) setValueBool(driver driverName, id string, value bool) {
|
||||
f.exit = f.drivers[driver].SetValueBool(id, value)
|
||||
}
|
||||
|
||||
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.returns[to] = from
|
||||
f.setDriverNow(to)
|
||||
}
|
||||
}
|
||||
|
||||
func (f *Flow) playNextScenario() func() {
|
||||
func (f *Flow) playNextScenario(from driverName) func() {
|
||||
return func() {
|
||||
log.Printf("Loading scenario: %v", f.ship.NextScenario)
|
||||
|
||||
@@ -275,24 +228,11 @@ func (f *Flow) playNextScenario() func() {
|
||||
return
|
||||
}
|
||||
|
||||
f.current = nil // TODO: show the UI for a scenario
|
||||
f.setReturningDriverNow(from, mainGame)
|
||||
f.scenario = scenario
|
||||
}
|
||||
}
|
||||
|
||||
// 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) setExit() {
|
||||
f.exit = ErrExit
|
||||
}
|
||||
|
55
internal/flow/main_game.go
Normal file
55
internal/flow/main_game.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package flow
|
||||
|
||||
// TODO: There are Chaos and Ultramarine versions of MainGame. Do we really want
|
||||
// to duplicate everything for both?
|
||||
|
||||
func (f *Flow) linkMainGame() {
|
||||
// 3: Action menu
|
||||
|
||||
// 4: Interface options menu
|
||||
f.onClick(mainGame, "4.1", f.setReturningDriver(mainGame, options)) // Options button
|
||||
// 4.2: Map button
|
||||
// 4.3: Mission objectives button
|
||||
// 4.4: Inventory
|
||||
// 4.5: Next man
|
||||
// 4.6: Next enemy
|
||||
// 4.7: Total enemy text
|
||||
|
||||
// 5: Holding menu
|
||||
// 6: View menu
|
||||
// 7: General character menu
|
||||
// 8: Character stats
|
||||
// 9: Visible enemy menu
|
||||
// 10: Friendly squad menu
|
||||
// 11: Psyker spell dialogue
|
||||
|
||||
// FIXME: lots and lots and lots of wiring up to do.
|
||||
// For now, just link all the exit buttons to go back to the bridge
|
||||
f.onClick(mainGame, "11.6", func() {
|
||||
f.scenario = nil
|
||||
f.returnToLastDriverNow(mainGame)
|
||||
})
|
||||
|
||||
// 12: Inventory dialogue
|
||||
f.onClick(mainGame, "12.21", func() {
|
||||
f.scenario = nil
|
||||
f.returnToLastDriverNow(mainGame)
|
||||
})
|
||||
|
||||
// 13: Exchange menu
|
||||
|
||||
f.onClick(mainGame, "13.1", func() {
|
||||
f.scenario = nil
|
||||
f.returnToLastDriverNow(mainGame)
|
||||
})
|
||||
|
||||
// 14: Map
|
||||
|
||||
// 15: Interface wing left
|
||||
// 16: Interface wing right
|
||||
// 17: Grenade dialogue
|
||||
// 18: Info dialogue
|
||||
// 19: Turn start dialogue
|
||||
// 20: Chat menu
|
||||
// 21: Chat list menu box
|
||||
}
|
Reference in New Issue
Block a user