Add stubs for unknown widget types

This commit is contained in:
2020-03-25 00:23:28 +00:00
parent b986359047
commit 7824396c24
4 changed files with 83 additions and 2 deletions

View File

@@ -15,14 +15,29 @@ type MenuType int
const ( const (
TypeStatic MenuType = 0 TypeStatic MenuType = 0
TypeMenu MenuType = 1 TypeMenu MenuType = 1
TypeDragMenu MenuType = 2 // Only seen in Configure_Vehicle_{Chaos,Ultra}
TypeSimpleButton MenuType = 3 TypeSimpleButton MenuType = 3
TypeDoorHotspot MenuType = 30 // Like a button I guess? FONTTYPE is animation speed
TypeUnknown1 MenuType = 31 // ??? Needed for ChaEquip.mnu
TypeLineKbd MenuType = 40
TypeThumb MenuType = 45
TypeLineBriefing MenuType = 41
TypeInvokeButton MenuType = 50 TypeInvokeButton MenuType = 50
TypeSquadButton MenuType = 60 // Maybe? Appears in Arrange.mnu
TypeOverlay MenuType = 61 TypeOverlay MenuType = 61
TypeHypertext MenuType = 70 TypeHypertext MenuType = 70
TypeCheckbox MenuType = 91 TypeCheckbox MenuType = 91
TypeEditBox MenuType = 100
TypeInventorySelect MenuType = 110
TypeRadioButton MenuType = 120
TypeDropdownButton MenuType = 200
TypeComboBoxItem MenuType = 205
TypeAnimationSample MenuType = 220 TypeAnimationSample MenuType = 220
TypeAnimationToo MenuType = 221 // No idea why we have two of these. FONTTYPE is animation speed.
TypeMainButton MenuType = 228 TypeMainButton MenuType = 228
TypeSlider MenuType = 232 TypeSlider MenuType = 232
TypeStatusBar MenuType = 233
TypeDialogue MenuType = 300
) )
type Record struct { type Record struct {

View File

@@ -43,6 +43,11 @@ func (o *Ordoor) optionsDriver(main *ui.Driver) (*ui.Driver, error) {
return nil, err return nil, err
} }
kbd, err := o.keyboardDriver(options)
if err != nil {
return nil, err
}
if err := o.configIntoOptions(options); err != nil { if err := o.configIntoOptions(options); err != nil {
return nil, err return nil, err
} }
@@ -59,7 +64,8 @@ func (o *Ordoor) optionsDriver(main *ui.Driver) (*ui.Driver, error) {
50: 50, 60: 60, 70: 70, 80: 80, 50: 50, 60: 60, 70: 70, 80: 80,
} }
try(options.OnClick("2.8", func() {}), &err) // Keyboard settings button try(options.OnClick("2.8", func() { o.driver = kbd }), &err) // Keyboard settings button
try(options.ConfigureSlider("2.9", h3Slider), &err) // Resolution slider try(options.ConfigureSlider("2.9", h3Slider), &err) // Resolution slider
try(options.ConfigureSlider("2.10", v10Slider), &err) // Music volume slider try(options.ConfigureSlider("2.10", v10Slider), &err) // Music volume slider
try(options.ConfigureSlider("2.11", v10Slider), &err) // SFX volume slider try(options.ConfigureSlider("2.11", v10Slider), &err) // SFX volume slider
@@ -76,6 +82,24 @@ func (o *Ordoor) optionsDriver(main *ui.Driver) (*ui.Driver, error) {
return options, err return options, err
} }
func (o *Ordoor) keyboardDriver(options *ui.Driver) (*ui.Driver, error) {
kbd, err := o.buildDriver("keyboard")
if err != nil {
return nil, err
}
// TODO: implement keybindings save/load behaviour
try(kbd.OnClick("3.1", func() { o.driver = options }), &err) // Done button
try(kbd.OnClick("3.2", func() { o.driver = options }), &err) // Cancel button
try(kbd.OnClick("3.4", func() {}), &err) // Reset to defaults button
if err != nil {
return nil, err
}
return kbd, nil
}
// FIXME: exiting is a bit OTT. Perhaps display "save failed"? // FIXME: exiting is a bit OTT. Perhaps display "save failed"?
func acceptOptionsFn(o *Ordoor, main, options *ui.Driver) func() { func acceptOptionsFn(o *Ordoor, main, options *ui.Driver) func() {
return func() { return func() {

View File

@@ -14,6 +14,8 @@ func init() {
} }
// A button without hover animation // A button without hover animation
// FIXME: Keyboard.mnu has TypeSimpleButton instances that seem to include a
// hover in the SpriteId field
type button struct { type button struct {
path string path string
@@ -34,6 +36,11 @@ type mainButton struct {
} }
func registerSimpleButton(d *Driver, r *menus.Record) error { func registerSimpleButton(d *Driver, r *menus.Record) error {
// FIXME: LevelPly.mnu specifies a menu oddly. This tweak gets us past it
if d.Name == "levelply" && r.Id == 2 {
return nil
}
return registerButton(d, r, r.SpriteId[0]) return registerButton(d, r, r.SpriteId[0])
} }

View File

@@ -15,7 +15,42 @@ import (
func init() { func init() {
// These menu types don't need driving, so we can ignore them // These menu types don't need driving, so we can ignore them
registerBuilder(menus.TypeMenu, nil) // Menus are just containers registerBuilder(menus.TypeMenu, nil) // Menus are just containers
registerBuilder(menus.TypeDragMenu, nil) // Menus are just containers
// FIXME: these need implementing
// Needed for Keyboard.mnu (main -> options -> keyboard)
registerBuilder(menus.TypeLineKbd, nil)
registerBuilder(menus.TypeDialogue, nil)
// Needed for Arrange.mnu (???)
registerBuilder(menus.TypeSquadButton, nil)
registerBuilder(menus.TypeAnimationToo, nil)
// Needed for Bridge.mnu
registerBuilder(menus.TypeDoorHotspot, nil)
// Needed for Briefing.mnu
registerBuilder(menus.TypeLineBriefing, nil)
// Needed for ChaEquip.mnu
registerBuilder(menus.TypeUnknown1, nil)
registerBuilder(menus.TypeThumb, nil)
registerBuilder(menus.TypeInventorySelect, nil)
// Needed for MainGameChaos.mnu
registerBuilder(menus.TypeStatusBar, nil)
// Needed for Multiplayer_Choose.mnu
registerBuilder(menus.TypeComboBoxItem, nil)
registerBuilder(menus.TypeDropdownButton, nil)
// Needed for Multiplayer_Configure.mnu
registerBuilder(menus.TypeEditBox, nil)
// Needed for Multiplayer_Connect.mnu
registerBuilder(menus.TypeRadioButton, nil)
} }
const ( const (