Refactor inventorySelect to build it hierarchically
This commit is contained in:
@@ -12,7 +12,7 @@ import (
|
||||
func init() {
|
||||
registerBuilder(menus.TypeCheckbox, noChildren(registerCheckbox))
|
||||
registerBuilder(menus.TypeSlider, noChildren(registerSlider))
|
||||
registerBuilder(menus.TypeInventorySelect, noChildren(registerInventorySelect))
|
||||
registerBuilder(menus.TypeInventorySelect, ownedByMenu)
|
||||
}
|
||||
|
||||
// A checkbox can be a fancy button
|
||||
@@ -96,10 +96,12 @@ func registerSlider(d *Driver, r *menus.Record) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func registerInventorySelect(d *Driver, r *menus.Record) error {
|
||||
// Called from the menu, which fills "others"
|
||||
// TODO: make this a single call? A single component with multiple choices?
|
||||
func registerInventorySelect(d *Driver, r *menus.Record) (*inventorySelect, error) {
|
||||
sprites, err := d.menu.Sprites(r.Share, 3) // unchecked, checked, disabled
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
element := &inventorySelect{
|
||||
@@ -122,32 +124,7 @@ func registerInventorySelect(d *Driver, r *menus.Record) error {
|
||||
d.paintables = append(d.paintables, element)
|
||||
d.valueables = append(d.valueables, element)
|
||||
|
||||
if r.Parent == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
element.parentPath = r.Parent.Path()
|
||||
|
||||
// Now update all inventory selects belonging to the same menu so they share
|
||||
// a list of all inventory selects. This will be replaced several times as
|
||||
// the menu is built.
|
||||
var inventorySelects []*inventorySelect
|
||||
for _, valueable := range d.valueables {
|
||||
if is, ok := valueable.(*inventorySelect); ok && is.parentPath == element.parentPath {
|
||||
inventorySelects = append(inventorySelects, is)
|
||||
}
|
||||
}
|
||||
|
||||
for _, is := range inventorySelects {
|
||||
is.others = inventorySelects
|
||||
}
|
||||
|
||||
// Select the first in the list
|
||||
if len(inventorySelects) == 1 {
|
||||
element.setValue("1")
|
||||
}
|
||||
|
||||
return nil
|
||||
return element, nil
|
||||
}
|
||||
|
||||
func (c *checkbox) registerMouseClick() {
|
||||
|
Reference in New Issue
Block a user