51 lines
753 B
Go
51 lines
753 B
Go
|
package assetstore
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
|
||
|
"code.ur.gs/lupine/ordoor/internal/sets"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
ErrOutOfBounds = errors.New("Out of bounds")
|
||
|
)
|
||
|
|
||
|
type Set struct {
|
||
|
assets *AssetStore
|
||
|
|
||
|
raw *sets.MapSet
|
||
|
}
|
||
|
|
||
|
func (s *Set) Object(idx int) (*Object, error) {
|
||
|
if idx < 0 || idx >= len(s.raw.Palette) {
|
||
|
return nil, ErrOutOfBounds
|
||
|
}
|
||
|
|
||
|
return s.assets.Object(s.raw.Palette[idx])
|
||
|
}
|
||
|
|
||
|
func (a *AssetStore) Set(name string) (*Set, error) {
|
||
|
name = canonical(name)
|
||
|
if set, ok := a.sets[name]; ok {
|
||
|
return set, nil
|
||
|
}
|
||
|
|
||
|
filename, err := a.lookup(name, "set", "Sets")
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
raw, err := sets.LoadSet(filename)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
set := &Set{
|
||
|
assets: a,
|
||
|
raw: raw,
|
||
|
}
|
||
|
a.sets[name] = set
|
||
|
|
||
|
return set, nil
|
||
|
}
|